如何从给定的 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 的文件。
./myscript.sh -r "[1,4]" -p "[10,20,30]"
[1,4]
被 bash 扩展为名为 1
或 ,
或 4
的文件名(以系统中实际存在的为准)。
同样,[10,20,30]
被扩展为名为 1
或 0
或 ,
或 2
或 3
.
的文件名
类似地,您还应该将 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]"
我想以
的形式将参数传递给脚本 ./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 的文件。
./myscript.sh -r "[1,4]" -p "[10,20,30]"
[1,4]
被 bash 扩展为名为 1
或 ,
或 4
的文件名(以系统中实际存在的为准)。
同样,[10,20,30]
被扩展为名为 1
或 0
或 ,
或 2
或 3
.
类似地,您还应该将 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]"