【发布时间】:2017-07-21 10:55:09
【问题描述】:
我想将一个字符串列表分配给一个数组。这些字符串包含我想保留的重要尾随空格。如下所示,当我单独分配数组元素时会保留空格。但是当我使用“declare”命令分配数组元素时,空格会丢失。一个尴尬的解决方案是使用“\”转义每个空格。有没有更好的方法,或者我缺少一些语法魔法?
代码:
echo "This does what I want:"
array1[0]="foo "
array1[1]="bar "
for element in "${array1[@]}"
do
echo "${element}x"
done
echo "This makes me sad:"
declare -a array2=("foo " "bar ")
for element in "${array2[@]}"
do
echo "${element}x"
done
echo "This too:"
declare -a array3=('foo ' 'bar ')
for element in "${array3[@]}"
do
echo "${element}x"
done
echo "An awkward solution:"
declare -a array4=("foo\ \ \ " "bar\ \ \ ")
for element in "${array4[@]}"
do
echo "${element}x"
done
输出:
This does what I want:
foo x
bar x
This makes me sad:
foox
barx
This too:
foox
barx
An awkward solution:
foo x
bar x
【问题讨论】:
-
它对我来说可以正常工作。
-
ideone.com 演示:ideone.com/PKiioG
-
当我使用你的“尴尬”解决方案时,我看到输出中的所有反斜杠。
-
是的,我看了你的演示。我有旧版本的 bash(GNU bash,版本 2.05b.0(1)-release (i386-redhat-linux-gnu))。也许这就是问题所在?
-
可能。这听起来像是旧版本中已修复的错误。您已经找到了该错误的解决方法,请使用它。
标签: arrays bash unix scripting