使用命令输出中的带引号的条目在Bash中创建数组

Ale*_*ill 5 arrays bash stdout quoting

我在从标准输出中形成bash数组时遇到问题.我把它归结为这个最小的例子:

~$ a=($(echo '1 2 3 "foo bar"'))
~$ echo ${a[0]}
1
~$ echo ${a[1]}
2
~$ echo ${a[2]}
3
~$ echo ${a[3]}
"foo
~$ echo ${a[4]}
bar"
Run Code Online (Sandbox Code Playgroud)

我相信所发生的事情是,"foobar"被认为是标准输出单独项目,但目标是巩固这些物品放入一个数组.

显然,我可以编写一个小循环来将这些术语合并为一个,但我想知道有一个更优雅的解决方案吗?

编辑:echo '1 2 3 "foo bar"'在我的代码中代替的是相当复杂的,但关键是我需要从这个表单的一些未知标准输出形成一个数组.

iru*_*var 7

xargs 如此认可报价

mapfile -t a <<<"$(echo '1 2 3  "foo bar"' | xargs -n 1)"
printf "%s\n" "${a[@]}"
1
2
3
foo bar
Run Code Online (Sandbox Code Playgroud)

  • 非常好 - 不知道**`xargs`识别嵌入字符串文字中的引用标记(适用于单引号和双引号)**.对于bash 3.x用户(例如,在OSX上):`IFS = $'\n'读-d''-ra a <<<"$(echo'1 2 3"foo bar"'| xargs -n 1 )"`. (2认同)