だけpipe(|
)コマンド出力awk
へ:ここ
は13.670712を印刷したコードです。ここの例では、awk
は、前のコマンドのstdout
から読み取り、デフォルトの単一空白文字で制限解除された2nd
列を出力します。
test="$(3dBrickStat -mask ../../template/ROIs.nii -mrange 41 41 -percentile 70 1 70 'stats.s1_ANTS+tlrc[25]' | awk '{print $2}')"
printf "%s\n" "$test"
13.670712
(または)あなたはbash
-ismでこれを行うために他の方法を探している場合、これは、これを実行する方法が最も簡単ですecho
echo "$test"
13.670712
を使用して、使用したとしてread
コマンドを使用します。 process-substitution
read _ va2 < <(3dBrickStat -mask ../../template/ROIs.nii -mrange 41 41 -percentile 70 1 70 'stats.s1_ANTS+tlrc[25]')
printf "%s\n" "$val2"
13.670712
シェルAに関係なく動作するset
を使用して別のよりポータブルバージョン、利用可能です。
set -- $(3dBrickStat -mask ../../template/ROIs.nii -mrange 41 41 -percentile 70 1 70 'stats.s1_ANTS+tlrc[25]');
printf "%s\n" "$2"
13.670712
'read'ソリューションはかなり良いと慣用句です。私は 'set'を推奨しません。私は移植性を探しているなら、最初のものが最良の選択だろうと思っています(しかし、OPはBashを指定していますので、最も効率的です)。 –
@gniourf_gniourf:それを感謝します!外部ユーティリティなしで可能な方法として提供することを望んでいた。しかし、私はこのような単純なユースケースのためにとにかく問題ではないと思います。 'set'を推奨しない理由は、フィールド分離と関係がありますか? – Inian
正確に。私はパス名展開の明示的な要求として、引用符で囲まれていない展開について考えています(もちろん、単語分割と一緒に)。ここでの使用は単語の分割のみです...それは私にとって意味的には見えませんが(しかし、私はとても気に入っています)。 –