如何从给定的 bash 脚本中的命令行读取值?

How to read values from command line in bash script as given?

我想以

的形式将参数传递给脚本
    ./myscript.sh -r [1,4] -p [10,20,30]

如果我在 myscript.sh 中:

    echo $@

但我得到的输出是

   -r 1 4 -p 1 2 3

如何获得

形式的输出
   -r [1,4] -p [10,20,30]

我正在使用 Ubuntu 12.04 和 bash 版本 4.2.37

您的工作目录中有名为 1 2 3 & 4 的文件。

Use more quotes.

./myscript.sh -r "[1,4]" -p "[10,20,30]"

[1,4] 被 bash 扩展为名为 1,4 的文件名(以系统中实际存在的为准)。
同样,[10,20,30] 被扩展为名为 10,23.

的文件名

类似地,您还应该将 echo $@ 更改为 echo "$@"

另一方面,如果您真的想区分参数,请使用 printf '%s\n' "$@" 而不是 echo "$@".

你可以直接转义括号[]。像这样,

./verify.sh  -r \[1,4\] -p \[10,20,30\]

您可以使用 echo "$@"

打印此

您可以关闭filename expansion

set -f
./myscript.sh -r [1,4] -p [10,20,30]

如果您分享您的脚本,不要指望其他用户想要这样做。

最佳答案是 anishane 的:只需引用论点

./myscript.sh -r "[1,4]" -p "[10,20,30]"