带空格的命令行参数

Command line args with spaces

使用包含空格的命令行参数调用 shell 脚本通常通过将参数括在引号中来解决:

getParams.sh 'one two' 'foo bar'

产生:

one two
foo bar

getParams.sh:

while [[ $# > 0 ]]
do
    echo 
    shift
done

但是,如果首先定义一个 shell 变量来保存参数的值,例如:

args="'one two' 'foo bar'"

那为什么:

getParams.sh $args

不认识包含分组参数的单引号?输出为:

'one
two'
'three
four'

如何将包含空格的命令行参数存储到变量中,以便在调用 getParams 时,参数根据引用的参数分组,就像在原始示例中一样?

使用数组:

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

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

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

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

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