【问题标题】:bash "$@" not working with arguments starting with '-'bash "$@" 不适用于以 '-' 开头的参数
【发布时间】:2018-04-08 04:08:20
【问题描述】:

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

for arg in "$@"; do
  echo ${arg}
done
echo "end"

在下面运行返回:

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

end

我正在运行 bash 4.1.2,为什么 -b 没有在空行返回?我认为这与“-”有关。

【问题讨论】:

    标签: bash shell arguments parameter-passing


    【解决方案1】:

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

    printf '%s\n' "$arg"
    

    【讨论】:

    • 但是-b-a 都不是echo 的有效标志,对吧?答案很好,但想知道 OP 的输出不正确
    • 正确;我不知道为什么-b 似乎被echo 视为一个选项。
    • 无论如何,-n 也有这个问题,解决方法是一样的
    • 谢谢这个回答。同样,我将我的其他代码转换为问题的伪代码,并按字母顺序将 args 概括为 -a -b,但与我的脚本有关的真正选项是 -c 和 -e。 echo -e 是一个有效的选项,因此我没有打印它。
    • @Jeremy 将来您将始终从您的帖子中复制粘贴您的测试用例并验证它是否显示了您打算显示的问题,对吧:P
    猜你喜欢
    • 1970-01-01
    • 2021-10-15
    • 2010-10-18
    • 1970-01-01
    • 1970-01-01
    • 2021-10-30
    • 1970-01-01
    • 2020-11-27
    • 1970-01-01
    相关资源
    最近更新 更多