如何在单独的行上打印Bash数组的数组元素?这个有效,但肯定有更好的方法:
$ my_array=(one two three)
$ for i in ${my_array[@]}; do echo $i; done
one
two
three
Run Code Online (Sandbox Code Playgroud)
试过这个,但它不起作用:
$ IFS=$'\n' echo ${my_array[*]}
one two three
Run Code Online (Sandbox Code Playgroud)
Gil*_*not 387
试着这样做:
$ printf '%s\n' "${my_array[@]}"
Run Code Online (Sandbox Code Playgroud)
$@和之间的区别$*:
未加引号,结果未指定.在Bash中,两者都扩展为单独的args,然后是wordsplit和globbed.
引用,"$@"将每个元素扩展为单独的参数,同时"$*"
扩展为合并为一个参数的args :( "$1c$2c..."其中c第一个是char IFS).
你几乎总是想要"$@".同样如此"${arr[@]}".
总是引用它们!
per*_*eal 66
只需引用echo的参数:
( IFS=$'\n'; echo "${my_array[*]}" )
Run Code Online (Sandbox Code Playgroud)
子shell有助于在使用后恢复IFS
小智 38
使用为:
for each in "${alpha[@]}"
do
echo "$each"
done
Run Code Online (Sandbox Code Playgroud)
使用历史 ; 请注意,如果您的值包含!:
history -p "${alpha[@]}"
Run Code Online (Sandbox Code Playgroud)
使用basename ; 请注意,如果您的值包含/:
basename -a "${alpha[@]}"
Run Code Online (Sandbox Code Playgroud)
使用shuf ; 请注意,结果可能不会按顺序排出:
shuf -e "${alpha[@]}"
Run Code Online (Sandbox Code Playgroud)