除了set内置命令描述中的单字符选项外,bash在被调用时也解释如下选项:
如果有-c,命令从string中读入。如果在string后面有参数,它们被赋给位置变量,从$0开始。
$ echo $0 -bash $ bash -c "echo $0" -bash $ bash -c "echo \$0" bash $ bash -c "echo \$0" foo foo $ bash -c 'echo $0' bash $ bash -c 'echo $0' foo foo $ bash -c help ... $ bash -c "help set" ... $ bash -c 'help $0' set ...
如果有-i,shell是交互式的(interactive)。
使得bash行为表现的像登录shell(login shell)一样。
如果有-r,shell就是受限的(restricted)。
如果有-s,或者选项处理之后没有别的参数,那么命令从标准输入读入。这个选项允许在调用交互式shell时设置位置变量。
$ echo $SHLVL 1 $ bash -s hello world $ echo $SHLVL 2 $ echo $0 $1 $2 bash hello world
在标准输出中打印$引导的双引号字符串列表。如果当前区域设置不是C或者POSIX的时候,这些字符串与语言翻译相关。这个选项意味着-n选项,不执行命令。
$ cat test.sh #!/bin/sh echo $"hello" $"world" $ ./test.sh hello world $ bash -D test.sh "hello" "world"
shopt_option是shopt内置命令能接受的shell选项之一。如果有shopt_option,-O设置该选项,+O清除该选项。如果没有shopt_option,shopt能接受的shell选项的名字和值被打印到标准输出(bash -O)。如果以bash+O调用,输出可以用作输入。
--表示选项的结束并禁止进一步的选项处理。--后面的参数被认为是文件名和参数。参数为-它等同于--。
bash也处理一些多字符选项。要识别这些选项,它们必须在命令行上出现在单字符选项之前。
在shell开始之前执行调试器配置。打开扩展调试模式(extdebug/shopt)和shell函数跟踪(-o functrace/set)。
等同于-D,输出是GNU gettext po(portable object)文件格式。
等同于-D.
在标准输出显示使用信息然后成功退出。
如果shell是交互式的,执行file中的命令而不是标准的个人初始化文件~/.bashrc。
等同于-l。
如果shell是交互式的,不使用GNU readline库来读取命令行。
不读取系统级的启动文件/etc/profile或者任意的个人初始化文件~/.bash_profile,~/.bash_login或者~/.profile。默认情况下bash会读取这些文件如果它是登录shell。
如果shell是交互式的,不读取并执行个人初始化文件~/.bashrc。如果shell以sh被调用,这个选项默认打开。
改变bash的行为以匹配标准(posix模式),这些行为的默认操作与POSIX标准不同。
shell是受限制的。
产生为了运行shell脚本所需要的文件列表。这意味着'-n'且与编译期错误检查有着相同的限制;反引号(`),[]测试和演算(evals)是不被解析的,所以一些依赖可能缺失。
等同于-v。
在标准输出显示版本信息然后成功退出。
如果选项处理之后仍然有参数,同时又没有-c或者-s选项,那么第一个参数被认为是包含shell命令的文件的名字。$0被设置成文件名,位置变量被设置成剩余的参数。bash从文件中读取命令并执行,然后退出。bash的退出状态是脚本中最后一个执行的命令的退出状态。如果没有执行命令,退出状态是0。首先尝试在当前目录打开文件,如果文件没有找到,shll就会在PATH中的目录寻找脚本。