特定の出力をシェル変数に保存

特定の出力をシェル変数に保存

svn infoさらなる処理のために、コマンドの出力(より正確にはリビジョン番号)を変数に保存したいと思います。ただストレージスペースが必要です4

$ svn info
[...]
Revision: 4
[...]

ベストアンサー1

awkを使う

awkはこれに対してうまく機能します。

rev=$(svn info | awk '/Revision:/{print $2}')

上記のコードはコマンドの置き換え$(...)はコマンドの出力をキャプチャして変数に割り当てます。

上記のコードでは、awkは出力を読み取り、svn info文字列を含む行を待ちますRevision:。行が見つかったら、行の2番目のフィールド(リビジョン番号)を印刷します。

sedを使う

sedを使用してこれを実行することもできます。

rev=$(svn info | sed -n '/Revision:/ s/.* //p')

この-nオプションを使用すると、sed は明示的に要求された場合にのみ印刷します。 /Revision:/文字列を含む行を選択しますRevision:。これらの行の場合は、置換コマンドを実行し、行の最後のスペースまですべての文字を削除してから、このpオプションに従って行を印刷します。

シェルを使う

while read -r name value
do 
    [ "$name" = Revision: ] && var="$value"
done < <(svn info)

上記でリダイレクトが使用されました。プロセスの交換、、、はwhileループの< <(...)出力を提供します。svn infoループが繰り返されるたびに、行の最初の単語がに割り当てられ、name残りの行がに割り当てられますvalue。その場合、シェル変数はnameリビジョン番号に割り当てられます。Revision:varvalue

すべてではありませんが、多くのシェルがプロセス置換をサポートしています。上記のように、リダイレクトがプロセスの置き換えと組み合わせると、2つの間のスペースが<重要です。

おすすめ記事