出力を変数にリダイレクトしますか?


9

2つのコマンドからの出力を変数に送信することに興味があります。出力を画面に表示したくないので、スクリプト内の変数に割り当てて、もう一度使用できるようにします。

以下のコマンドを使用して、ディレクトリからファイルサイズを取得しています。

ls -l /var/spool | wc -c

このコマンドは、ファイルサイズをバイト単位で取得し、出力を整数として表示します。この整数を好きな変数に割り当てて、後で別の変数と比較できるようにしたい

これはうまくいかないようです:

size = ls -l /var/spool | wc -c

リダイレクトは機能しますか?

このような....

ls -l /var/spool | wc -c > size

どちらにしても、この数値出力を変数に割り当てて、画面に表示しないようにします。

どんな提案も大歓迎です!

回答:


12

それは非常に簡単です。

romano@RRyS:~$ size=$(ls -l /var/spool | wc -c)
romano@RRyS:~$ echo $size
476

シェル構文$(command)はを実行しcommand、標準出力を返します。変数に保存するだけです。

あなたのコマンド:

ls -l /var/spool | wc -c > size 

size現在のディレクトリ(番号と改行を含む)で名前が付けられたファイルを作成します 。


または、コマンドを逆引用符で囲みますsize=`ls -l /var/spool | wc -c`。回答に次の形式を使用します: "` `size =` ls -l / var / spool | wc -c` `` "二重引用符なし;)
αғsнιηNov

1
@KasiyA私$()はここで説明されている理由のために使用することを好みます:stackoverflow.com/a/9449788/2907484 :-)
Rmano '20

1
(1)実行した後ls -l /var/spool | wc -c > size_file、できread size_var < size_fileます。(2)コマンド置換のために$()が常にバックティックを置き換える
G-Manは 'Reinstate Monica'を

6

私はRmanoの回答が提供するソリューションを好みますが、リダイレクトのみを使用する場合:

read size < <(ls -l /var/spool | wc -c)

1
唯一のリダイレクトを使用する主な利点は、( -あなたのスクリプトはパイプ処理のためにセットアップされている方法に応じて、それがエラーを飲み込むしないということであるset -eset -o pipefailなど)。したがって$(…)、スクリプトを使用すると、常に続行されますが、リダイレクトを使用すると、失敗するように設定できます。(それはあなたが望むものかそうでないかもしれません)。
Garrett Motzner、2018
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.