如何在单独的行上打印Bash数组的数组元素?此方法有效,但肯定有更好的方法:
$ my_array=(one two three)
$ for i in ${my_array[@]}; do echo $i; done
one
two
three
尝试过此方法,但没有用:
$ IFS=$'\n' echo ${my_array[*]}
one two three
如何在单独的行上打印Bash数组的数组元素?此方法有效,但肯定有更好的方法:
$ my_array=(one two three)
$ for i in ${my_array[@]}; do echo $i; done
one
two
three
尝试过此方法,但没有用:
$ IFS=$'\n' echo ${my_array[*]}
one two three
Answers:
尝试这样做:
$ printf '%s\n' "${my_array[@]}"
$@
和之间的区别$*
:
未引用,结果未指定。在Bash中,两者都展开为单独的args,然后进行单词拆分和修改。
带引号的"$@"
将每个元素扩展为一个单独的参数,而"$*"
扩展为合并到一个参数的args :("$1c$2c..."
其中c
是的第一个字符IFS
)。
你几乎总是想要"$@"
。同样适用"${arr[@]}"
。
总是引用它们!
| grep -v '^$'
呢?
只需引用要回显的参数即可:
( IFS=$'\n'; echo "${my_array[*]}" )
子外壳有助于在使用后恢复IFS
IFS=$'\n' echo "${my_array[*]}"
工作太差,因此无法正常工作。那好吧!
echo
是Bash内置的。但是,您可以将其包装在一个函数中,它将起作用!gist.github.com/steshaw/53ba0095bce8ccab52d26a14375dedb8