secondLarge=`printf '%s\n' "${array[@]}" | sort -n | tail -2 | head -1`
2番目に大きな数字を取得しようとすると取得しますが、取得しようとするとecho
取得できません。理解するのに役立ちます
secondLarge=`echo "${array[@]}" | sort -n | tail -2 | head -1`
答え1
GNUバージョンprintf
(通常はインストールされている/usr/bin/printf
)と同じ名前のBash組み込みバージョンは、すべて%
フォーマット文字列で-expandosよりも多くの引数を渡すとループのように動作します。
一方:
declare -a array=( a b c )
それから:
printf '%s\n' "${array[@]}"
以下と多少同じです。
for x in "${array[@]}"
do
echo $x
done
上記の両方とも、次のような結果を生成します。
a
b
c
比較してみると:
echo "${array[@]}"
次を生成します。
a b c
パイプラインは出力をソートし、2番目から最後の行を取得します。例では、printf
配列の各要素が独自の行に印刷されるため、配列内の2番目に大きい数値が表示されます。を使用すると、echo
処理する行が1つしかないため、すべての配列値を含む行を1つ取得します。