从包含文本的变量中回显特定单词

时间:2016-10-19 12:23:54

标签: shell

我正在尝试使用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

1 个答案:

答案 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分配