如何在单独的行上打印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
当前回答
只需引用回显的参数:
( IFS=$'\n'; echo "${my_array[*]}" )
子壳有助于恢复IFS使用后
其他回答
我发现你可以使用eval来避免使用subshell。因此:
IFS=$'\n' eval 'echo "${my_array[*]}"'
只需引用回显的参数:
( IFS=$'\n'; echo "${my_array[*]}" )
子壳有助于恢复IFS使用后
你可以使用Bash C Style For循环来做你想做的事情。
my_array=(one two three)
for ((i=0; i < ${#my_array[@]}; i++ )); do echo "${my_array[$i]}"; done
one
two
three
使用:
for each in "${alpha[@]}"
do
echo "$each"
done
使用历史;注意,如果你的值包含!
history -p "${alpha[@]}"
使用:;注意,如果你的值包含/,这将失败:
basename -a "${alpha[@]}"
使用shuf;注意,结果可能不是按顺序显示的:
shuf -e "${alpha[@]}"
另一个有用的变体是pipe to tr:
Echo "${my_array[@]}" | tr ' ' '\n' '
这看起来简单而紧凑