带空格的命令行参数

时间:2018-07-06 07:37:10

标签: bash shell arguments spaces

使用命令行参数包含空格的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时,就像在原始示例中一样,根据引用的参数对参数进行分组?

1 个答案:

答案 0 :(得分:2)

使用数组:

args=('one two' 'foo bar')

getParams.sh "${args[@]}"

使用args="'one two' 'foo bar'"无效,因为单引号在双引号内时保留其原义值。

要在参数中保留多个空格(并处理特殊字符,例如*),应引用变量:

while [[ $# -gt 0 ]]
do
    echo "$1"
    shift
done