从一个命令我得到一些参数,我想在shell脚本中使用bash中的select语句向用户提供。命令提供的参数可能包含空格,因此受引号保护。这是一个简化的例子。
这按预期工作:
select opt in a b "c d"
do
echo $opt
break
done
输出如预期:
1) a
2) b
3) c d
#?
但是使用变量中的命令输出它不能按预期工作:
opts="a b \"c d\""
select opt in $opts
do
echo $opt
break
done
虽然$ opts包含与第一个选择示例中的硬编码类型相同的输出,但输出是不同的:
1) a
2) b
3) "c
4) d"
#?
所以不是bash消耗了报价。它们被保留,但引号不会像我们硬编码时那样封装参数。正如我已经写过的那样,我将参数作为命令的输出。它们可能包含空格,因此已经被引号保护。如何将它们整合到“选择”语句中?它不是关于单引号和双引号。使用单引号也会发生同样的情况:
1) a
2) b
3) 'c
4) d'
#?