我正在尝试使用echo命令从变量(其中包含文本)中打印一些特定单词,如下所示:
for i in $variable
do
IFS="|" # the text is in format : word1|word2|word3
first=( "$i" )
echo ${first[1]}
IFS=$OlIFS # I have a OlIFS variable which I set in the beginning of the code as following : OlIFS=$IFS
done
结果是一大堆空行。我猜问题是在echo命令中,但我不太确定 $变量包含格式为的文本:
word1line1|word2line1|word3line1
word1line2|word2line2|word3line2
预期输出为:
word1line1
word1line2
.
.
etc
如果我使用$ {first [2]},我希望将word2作为结果而不是word1
答案 0 :(得分:1)
您的问题是您在数组分配中引用变量。在这种情况下,您确实希望不加引号来获得单词拆分效果。
引用:
$ variable="word1line1|word2line1|word3line1
word1line2|word2line2|word3line2"
$ for word in $variable; do ( IFS='|'; words=("$word"); echo "${words[0]}" ); done
# ............................................^.....^
word1line1|word2line1|word3line1
word1line2|word2line2|word3line2
未加引号:
$ for word in $variable; do ( IFS='|'; words=($word); echo "${words[0]}" ); done
# ............................................^....^
word1line1
word1line2
我使用子shell来本地化IFS分配