bash"$ @"不使用以' - '开头的参数

jwb*_*ove 0 bash shell arguments parameter-passing

我正在使用一个选项驱动的bash脚本,它将使用getopts.该脚本的情况是,它可以接受多个选项和只接受一个选项的特定情况.在测试一些案例时,我遇到了这个问题,我已经将这个问题简化为伪代码.

for arg in "$@"; do
  echo ${arg}
done
echo "end"
Run Code Online (Sandbox Code Playgroud)

在下面运行返回:

$ ./test.sh -a -b
-a

end
Run Code Online (Sandbox Code Playgroud)

我正在运行bash 4.1.2,为什么不在空行返回-b?我认为这与' - '有关.

che*_*ner 5

我无法重现您的确切错误,但这是使用的风险echo:如果$arg 有效选项,它将被视为这样,而不是要打印的字符串.printf改为使用:

printf '%s\n' "$arg"
Run Code Online (Sandbox Code Playgroud)

  • @Jeremy将来,您将始终从帖子中复制粘贴测试用例并验证它是否显示您要显示的问题,对:P: (3认同)
  • 但`-b`或`-a`都不是`echo`对的有效标志吗?答案很好,但是想知道OP的输出是不正确的 (2认同)