带空格的命令行参数
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
使用包含空格的命令行参数调用 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