GNU/Linux >> Linux の 問題 >  >> Linux

変数の内容を単語で逆にする

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 

Linux
  1. Bashスクリプト(I)

  2. 間接変数評価を行う方法は?

  3. ファイル内で最も頻繁に使用されるN個の単語を検索しますか?

  1. Awkの外部変数?

  2. $ path変数環境変数?

  3. シェル変数でWebページのコンテンツを取得するには?

  1. Bash動的(変数)変数名?

  2. キャメルケースの単語の別々の要素?

  3. シェル - 変数の内容をファイルに書き込む