`svn status -uq`の出力にはスクリプトに改行がありません


0
function runstatus {
    echo "SVN Status -uq:"
    echo 
    status=$(svn status -uq)
    echo $status
    echo $bigline
}

これは次のようなものを出力します:

SVNステータス-uq:

rd_backup rd_backup.sh update 764 updateリビジョンに対するステータス:771

通常、の代わりに手動でコマンドを実行すると./update、次のようになります。

svn status -uq

M * 764アップデート

改訂に対するステータス:771

すなわち、改行を使用します。スクリプトから実行するときに、フォーマットが同じままで読みやすいことを確認するにはどうすればよいですか?


2
の出力を実行するsvn status -uq代わりに、単に実行しないのはなぜですか?echo$(svn status -uq)
slhck

そうそう、実際にはもっと意味があるようです
-paimoe

回答:


4

関数にコマンドの出力のみを表示する場合は、出力をキャプチャしてecho から再度キャプチャする必要はありません。

svn status -uq直接実行するだけです。stdoutは、関数呼び出しからも出力されます。


変数と変数を本当に使用echoする必要があるecho場合、空白を保持する場合は、渡された引数を引用符で囲む必要がありますecho "$status"

その理由は、$status文字通り次のものが含まれるからです。

M * 764 update
Status against revision: 771

を実行するとecho $status、次のechoように呼び出されます。

echo M * 764 update \
Status against revision: 771

Bashは引数を空白で分割するため、これは複数のパラメーターです(を参照$IFS)。echo1つのスペースで区切られた各引数を出力します。そのため、残りの行は問題なく見えますが、改行は本質的に1つのスペースに折りたたまれます。

引数を引用符で囲むechoと、1つの引数としてのみ表示され、再び正しく出力されます。

Bash Wikiには引用符がよく読まれており、いくつかの例外を除いて変数を常に引用する必要あるいくつかの理由がリストされています。


bashマニュアルの「Word Splitting」を参照してください:gnu.org/software/bash/manual/bashref.html#Word-Splitting
glenn jackman
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.