在Bash中使用感叹号 | 您所在的位置:网站首页 › 英文中的感叹号 › 在Bash中使用感叹号 |
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 实验室设备网 版权所有 |