【发布时间】:2021-11-19 16:30:17
【问题描述】:
我想用space 构造数组元素,它在命令行中运行时可以工作:
pc:/tmp$ b=('1 2' '3 4')
pc:/tmp$ echo $b
1 2
pc:/tmp$ echo ${b[1]}
3 4
但它会在脚本中将元素与space 分开:
pc:/tmp$ cat t.sh
a="'1 2' '3 4'"
echo $a
b=($a)
echo $b
echo ${b[1]}
echo ${b[2]}
pc:/tmp$ bash t.sh
'1 2' '3 4'
'1
2'
'3
我想在脚本中获取'1 2' 和echo $b,就像获取'3 4' 和${b[1]}。
我怎样才能做到这一点?
为什么它不能在脚本中运行,但在命令行中运行?
【问题讨论】:
-
b=($a)在空白处分割字符串。您必须为您的a编写一个解析器才能将其拆分。 -
如果您在命令行中测试了
b=($a),它的行为方式与您在脚本中的行为方式相同。这不是脚本与命令行的区别。 -
顺便说一句,在重复的答案中,我强烈建议找到一个使用 Python
shlex模块(如果您想要最接近真实 POSIX sh 解析器的准确性)或 @987654333 @ (如果你想要一些随处可用的东西,并且不会添加比xargs强制更多的错误)。 -
@CharlesDuffy THX,感谢您抽出宝贵时间,也许我应该提高我的搜索技巧,所有相关问题都有帮助。
标签: arrays bash shell whitespace