GNU システムでは、cat の逆は tac:
$ tac -s" " <<< "$VAR " # Please note the added final space.
100 90 80 70 60 50 40 30 20 10
短いリストと変数では、シェル自体が最速のソリューションです:
var="10 20 30 40 50 60 70 80 90 100"
set -- $var; unset a
for ((i=$#;i>0;i--)); do
printf '%s%s' "${a:+ }" "${!i}"
a=1
done
echo
出力:
100 90 80 70 60 50 40 30 20 10
注:set -- $var
の分割操作 ここで使用されている正確な文字列に対しては安全ですが、文字列にワイルドカード文字 (*
) が含まれている場合はそうではありません 、 ?
または []
)。 set -f
で回避できます 必要に応じて、分割前に。同じ注記が以下の解決策にも有効です (注記がある場合を除く)。
または、リバース リストを使用して他の変数を設定する場合:
var="10 20 30 40 50 60 70 80 90 100"
set -- $var
for i; do out="$i${out:+ }$out"; done
echo "$out"
または、位置パラメータのみを使用します。
var="10 20 30 40 50 60 70 80 90 100"
set -- $var
a=''
for i
do set -- "$i${a:+ [email protected]}"
a=1
done
echo "$1"
または、1 つの変数 (var 自体の場合もあります) のみを使用します。
注:このソリューションは、グロービングや IFS の影響を受けません。
var="10 20 30 40 50 60 70 80 90 100"
a=" $var"
while [[ $a ]]; do
printf '<%s>' "${a##* }"
var="${a% *}"
done
awk
救助に
$ var='10 20 30 40 50 60 70 80 90 100'
$ echo "$var" | awk '{for(i=NF; i>0; i--) printf i==1 ? $i"\n" : $i" "}'
100 90 80 70 60 50 40 30 20 10
perl
で 、礼儀 IPアドレスを逆に読む方法は? @steeldriver が共有
$ echo "$var" | perl -lane '$,=" "; print reverse @F'
100 90 80 70 60 50 40 30 20 10
または bash
で 文字列を配列に変換して
$ arr=($var)
$ for ((i=${#arr[@]}-1; i>=0; i--)); do printf "${arr[i]} "; done; echo
100 90 80 70 60 50 40 30 20 10