这就是我正在尝试的。我想要的是最后一个echo
循环说“一二三四测试1...”。它不起作用;read line
即将空空如也。这里有什么微妙的地方吗?或者这根本行不通?
array=( one two three )
echo ${array[@]}
#one two three
array=( ${array[@]} four )
echo ${array[@]}
#one two three four
while read line; do
array=( ${array[@]} $line )
echo ${array[@]}
done < <( echo <<EOM
test1
test2
test3
test4
EOM
)
我通常会写:
while read line
do
array=( ${array[@]} $line )
echo ${array[@]}
done <<EOM
test1
test2
test3
test4
EOM
或者,更有可能的是:
cat <<EOF |
test1
test2
test3
test4
EOF
while read line
do
array=( ${array[@]} $line )
echo ${array[@]}
done
(请注意,带有管道的版本不一定适用于 Bash。Bourne shell 将运行while
在当前 shell 中循环,但 Bash 在子 shell 中运行它——至少默认情况下是这样。在 Bourne shell 中,循环中所做的分配将在循环后在主 shell 中可用;在 Bash 中,它们不是。第一个版本始终设置数组变量,以便在循环后可以使用它。)
您还可以使用:
array+=( $line )
添加到数组中。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)