第 33 章. 选项

选项是更改 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.
      

Note

要在脚本中禁用一个选项,使用 set +o option-nameset +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花括号展开禁用 花括号展开
-Cnoclobber阻止通过重定向覆盖文件(可以被 >| 覆盖)
-D(无)列出以 $ 为前缀的双引号字符串,但不执行脚本中的命令
-aallexport导出所有已定义的变量
-bnotify当在后台运行的作业终止时通知(在脚本中用处不大)
-c ...(无)... 读取命令
checkjobs 在 shell 退出时通知用户任何打开的 jobs。在 Bash 的 版本 4 中引入,并且仍然是 "实验性的。" 用法: shopt -s checkjobs (注意: 可能会挂起!)
-eerrexit在第一个错误时中止脚本,当命令以非零状态退出时(除非在 untilwhile 循环, if-tests, list constructs 中)
-fnoglob文件名展开 (globbing) 已禁用
globstarglobbing 星号匹配启用 ** globbing 运算符(Bash 的 版本 4+)。用法: shopt -s globstar
-iinteractive脚本以交互式模式运行
-nnoexec读取脚本中的命令,但不执行它们(语法检查)
-o Option-Name(无)调用 Option-Name 选项
-o posixPOSIX更改 Bash 或调用的脚本的行为,以符合 POSIX 标准。
-o pipefail管道失败导致管道返回管道中最后一个返回非零返回值的命令的 退出状态
-pprivileged脚本以 "suid" 身份运行(注意!)
-rrestricted脚本以受限模式运行(参见 第 22 章)。
-sstdinstdin
-t(无)在第一个命令后退出
-unounset尝试使用未定义的变量会输出错误消息,并强制退出
-vverbose将每个命令打印到stdout在执行之前
-xxtrace类似于-v,但会展开命令
-(无)选项标志结束。所有其他参数都是位置参数
--(无)取消设置位置参数。如果给定参数 (-- arg1 arg2),位置参数设置为参数。