Bash

Bash - 反轉數組

  • February 11, 2022

有沒有一種簡單的方法來反轉數組?

#!/bin/bash

array=(1 2 3 4 5 6 7)

echo "${array[@]}"

所以我會得到:7 6 5 4 3 2 1

而不是:1 2 3 4 5 6 7

另一種非正常的方法:

#!/bin/bash

array=(1 2 3 4 5 6 7)

f() { array=("${BASH_ARGV[@]}"); }

shopt -s extdebug
f "${array[@]}"
shopt -u extdebug

echo "${array[@]}"

輸出:

7 6 5 4 3 2 1

如果extdebug啟用,數組BASH_ARGV在函式中包含所有位置參數的倒序。

非正常的方法(都不是純的bash):

  • 如果數組中的所有元素都只是一個字元(如問題中),您可以使用rev
echo "${array[@]}" | rev
  • 除此以外:
printf '%s\n' "${array[@]}" | tac | tr '\n' ' '; echo
  • 如果你可以使用zsh
echo ${(Oa)array}

引用自:https://unix.stackexchange.com/questions/412868