在Bash中使用感叹号 您所在的位置:网站首页 英文中的感叹号 在Bash中使用感叹号

在Bash中使用感叹号

2024-07-14 22:07| 来源: 网络整理| 查看: 265

1. 概述

我敢肯定,我们中的许多人一定在bash 脚本中看到过感叹号 (!) 。感叹号有不同的用途,具体取决于它的使用位置。它是 Bash shell 的强大功能之一,有助于提高生产力。

在本教程中,我们将看到 Bash 中感叹号的各种用途。

2. 指定解释器路径

**在 Bash 中,感叹号 (!) 与井号 (#) 一起使用来指定解释器路径。**这种用法称为“ shebang ”,表示为:

#!interpreter [arguments]

在 shell 脚本中,我们可以使用它来指定bash作为解释器:

$ cat welcome.sh #!/usr/bin/bash echo "Welcome !!!"

同样,我们可以在 Python 脚本的指令中使用它来指定Python可执行文件作为解释器:

$ cat welcome.py #!/usr/bin/python print("Welcome !!!")

请注意,此指令必须是脚本的第一行。

3. 反转命令的退出状态

**我们可以使用感叹号 (!) 来反转命令的退出状态。**让我们执行一个返回非零状态的命令:

$ ls non-existing-file.txt ls: cannot access 'non-existing-file.txt': No such file or directory $ echo $? 2

接下来,让我们反转它的返回状态:

$ ! ls non-existing-file.txt ls: cannot access 'non-existing-file.txt': No such file or directory $ echo $? 0

现在,让我们执行一个返回零状态代码的命令:

$ echo 'Hello, World' Hello, World $ echo $? 0

并将其返回状态反转为非零:

$ ! echo 'Hello, World' Hello, World $ echo $? 1

请注意,感叹号 (!) 和命令之间有一个空格。

4. 执行历史命令

Bash 维护当前会话中执行的命令的历史记录。我们可以使用感叹号(!)来执行历史记录中的特定命令。

4.1. 执行上一条命令

我们可以用*!!*执行前面的命令:

$ echo 'Hello, World' Hello, World $ !! echo 'Hello, World' Hello, World 4.2. 执行第 N个命令

我们可以使用*!n*语法来执行历史记录中的第 n个命令。在此表达式中,n表示历史中的命令编号。我们可以使用history 命令列出历史记录中的命令:

$ history ... ... ... 124 echo 'Hello, World' 125 history

让我们执行第 124条命令:

$ !124 echo 'Hello, World' Hello, World 4.3. 执行以特定字符串开头的命令

我们可以使用*!string语法来执行历史记录中以给定字符串*开头的命令。让我们执行以echo 开头的命令:

$ !echo echo 'Hello, World' Hello, World 5. 引用历史论据

我们可以使用感叹号 (!) 来引用来自先前执行的命令的参数。

5.1. 参考第 N个参数

我们可以使用*!:n*来引用先前执行的命令中的第 n个参数:

$ echo one two three four one two three four $ echo !:2 echo two two 5.2. 参考第一个参数

我们可以使用*!:^*来引用先前执行命令的第一个参数:

$ echo one two three four one two three four $ echo !:^ echo one one 5.3. 参考最后一个参数

我们可以使用*!:$*来引用先前执行的命令的最后一个参数:

$ echo one two three four one two three four $ echo !:$ echo four four 5.4. 请参阅所有参数

我们可以使用*!:**来引用先前执行的命令中的所有参数:

$ echo one two three four one two three four $ echo !:* echo one two three four one two three four 6. 覆盖失败行为的退出

我们可以将 Bash 配置为在命令执行失败时立即停止脚本执行。我们可以通过启用set -e选项来实现这一点。 但是,有时要求可以忽略某些故障。在这种情况下,我们可以使用感叹号 (!) 来覆盖退出失败行为:

$ cat ignore-failure.sh #!/bin/bash set -e ls non-existing-file.txt echo "Previous command's failure has been ignored."

让我们执行脚本并验证结果:

$ chmod +x ignore-failure.sh $ ./ignore-failure.sh ls: cannot access 'non-existing-file.txt': No such file or directory Previous command's failure has been ignored.


【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有