选项是更改 shell 和/或 脚本行为的设置。
set 命令可以在脚本中启用选项。在脚本中您想要选项生效的位置,使用 set -o option-name 或简写形式 set -option-abbrev。这两种形式是等效的。
#!/bin/bash set -o verbose # Echoes all commands before executing. |
#!/bin/bash set -v # Exact same effect as above. |
![]() | 要在脚本中禁用一个选项,使用 set +o option-name 或 set +option-abbrev。 |
#!/bin/bash set -o verbose # Command echoing on. command ... command set +o verbose # Command echoing off. command # Not echoed. set -v # Command echoing on. command ... command set +v # Command echoing off. command exit 0 |
在脚本中启用选项的另一种方法是在紧随#!脚本头之后立即指定它们。
#!/bin/bash -x # # Body of script follows. |
也可以从命令行启用脚本选项。某些不能与 set 一起使用的选项可以通过这种方式使用。其中包括-i,强制脚本以交互方式运行。
bash -v script-name
bash -o verbose script-name
以下是一些有用的选项列表。它们可以用缩写形式(以单个破折号开头)或完整名称(以双破折号或-o).
表 33-1. Bash 选项
缩写 | 名称 | 效果 |
---|---|---|
-B | 花括号展开 | 启用 花括号展开 (默认设置 = 开启) |
+B | 花括号展开 | 禁用 花括号展开 |
-C | noclobber | 阻止通过重定向覆盖文件(可以被 >| 覆盖) |
-D | (无) | 列出以 $ 为前缀的双引号字符串,但不执行脚本中的命令 |
-a | allexport | 导出所有已定义的变量 |
-b | notify | 当在后台运行的作业终止时通知(在脚本中用处不大) |
-c ... | (无) | 从 ... 读取命令 |
checkjobs | 在 shell 退出时通知用户任何打开的 jobs。在 Bash 的 版本 4 中引入,并且仍然是 "实验性的。" 用法: shopt -s checkjobs (注意: 可能会挂起!) | |
-e | errexit | 在第一个错误时中止脚本,当命令以非零状态退出时(除非在 until 或 while 循环, if-tests, list constructs 中) |
-f | noglob | 文件名展开 (globbing) 已禁用 |
globstar | globbing 星号匹配 | 启用 ** globbing 运算符(Bash 的 版本 4+)。用法: shopt -s globstar |
-i | interactive | 脚本以交互式模式运行 |
-n | noexec | 读取脚本中的命令,但不执行它们(语法检查) |
-o Option-Name | (无) | 调用 Option-Name 选项 |
-o posix | POSIX | 更改 Bash 或调用的脚本的行为,以符合 POSIX 标准。 |
-o pipefail | 管道失败 | 导致管道返回管道中最后一个返回非零返回值的命令的 退出状态。 |
-p | privileged | 脚本以 "suid" 身份运行(注意!) |
-r | restricted | 脚本以受限模式运行(参见 第 22 章)。 |
-s | stdin | 从stdin |
-t | (无) | 在第一个命令后退出 |
-u | nounset | 尝试使用未定义的变量会输出错误消息,并强制退出 |
-v | verbose | 将每个命令打印到stdout在执行之前 |
-x | xtrace | 类似于-v,但会展开命令 |
- | (无) | 选项标志结束。所有其他参数都是位置参数。 |
-- | (无) | 取消设置位置参数。如果给定参数 (-- arg1 arg2),位置参数设置为参数。 |