Arrays 将尾随换行符添加到所有bash数组项,但最后一项除外
我有一个名为“array”的数组,其中包含五个动物名称。我希望在每个数组项后面有两个换行符(\n\n),最后一个除外。下面的脚本正是我想要的:Arrays 将尾随换行符添加到所有bash数组项,但最后一项除外,arrays,bash,Arrays,Bash,我有一个名为“array”的数组,其中包含五个动物名称。我希望在每个数组项后面有两个换行符(\n\n),最后一个除外。下面的脚本正是我想要的: [user@T60 ~]$ cat scriptfile.sh #!/usr/bin/env bash array=( cat dog elefant zebra hippo ) number_of_items_in_array=${#array[@]} penultimate_array_item=$(( $number_of_items_in
[user@T60 ~]$ cat scriptfile.sh
#!/usr/bin/env bash
array=( cat dog elefant zebra hippo )
number_of_items_in_array=${#array[@]}
penultimate_array_item=$(( $number_of_items_in_array - 2 ))
ultimate_array_item=$(( $number_of_items_in_array - 1 ))
for i in $(seq 0 $penultimate_array_item); do
printf '%s\n' "${array[$i]/%/$'\n\n'}"
done
for i in $ultimate_array_item; do
printf '%s\n' "${array[$i]}"
done
[user@T60 ~]$ ./scriptfile.sh
cat
dog
elefant
zebra
hippo
[user@T60 ~]$
然而,我觉得它有点笨重。有更优雅、更简约的解决方案吗?你可以写:
array=( cat dog elefant zebra hippo )
echo "$(printf '%s\n\n\n' "${array[@]}")"
注:
- 如果给
的参数比格式字符串引用的参数多,那么它只需反复重新处理格式字符串,直到用完所有参数。因此,上面的printf
打印每个数组元素,后跟两个换行符printf
- 命令替换,
,除去所有尾随的换行符,即使它保留了其他空白“$(…)”
结合@glenn jackman关于在每个元素之前打印两条换行线(第一条除外)的见解和bash的阵列切片功能:
printf "%s\n" "${array[0]}"
printf "\n\n%s\n" "${array[@]:1}"
(请注意,如果数组只有一个元素,则此操作将无法正常工作。)
printf "%s\n" "${array[0]}"
printf "\n\n%s\n" "${array[@]:1}"