使用命令行参数包含空格的shell脚本通常通过将参数括在引号中来解决:
getParams.sh 'one two' 'foo bar'
产生:
one two
foo bar
getParams.sh:
while [[ $# > 0 ]]
do
echo $1
shift
done
但是,如果首先定义一个shell变量来保存参数值,例如:
args="'one two' 'foo bar'"
那为什么呢?
getParams.sh $args
不识别包含分组参数的单引号吗?输出为:
'one
two'
'three
four'
如何将包含空格的命令行参数存储到变量中,以便在调用getParams时,就像在原始示例中一样,根据引用的参数对参数进行分组?
答案 0 :(得分:2)
使用数组:
args=('one two' 'foo bar')
getParams.sh "${args[@]}"
使用args="'one two' 'foo bar'"
无效,因为单引号在双引号内时保留其原义值。
要在参数中保留多个空格(并处理特殊字符,例如*
),应引用变量:
while [[ $# -gt 0 ]]
do
echo "$1"
shift
done