选项是更改 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),位置参数设置为参数。 |