在Linux bash中有很多关于IFS字符串拆分和单引号转义的问题,但我发现没有人加入这两个主题。遇到问题后,我得到了一个奇怪的(对我来说)行为,代码如下所示:
(bash脚本块)
theString="a string with some 'single' quotes in it"
old_IFS=$IFS
IFS=\'
read -a stringTokens <<< "$theString"
IFS=$old_IFS
for token in ${stringTokens[@]}
do
echo $token
done
# let's say $i holds the piece of string between quotes
echo ${stringTokens[$i]}
发生的事情是,数组的 echo -ed元素实际上包含了我需要的子字符串(因此让我认为 \&#39; IFS是正确的)而 for 循环返回空格上的字符串拆分。
有人可以帮助我理解为什么同一个数组(或者我脑海中看起来像是同一个数组)的行为是这样的吗?
答案 0 :(得分:1)
当你这样做时:
for token in ${stringTokens[@]}
循环有效地变为:
for token in a string with some single quotes in it
for循环不解析数组元素,但它解析由空格分隔的字符串的整个输出。
而是尝试:
for token in "${stringTokens[@]}";
do
echo "$token"
done
这相当于:
for token in "in a string with some " "single" " quotes in it"
我的电脑输出:
a string with some
single
quotes in it
查看此更多Bash陷阱: http://mywiki.wooledge.org/BashPitfalls