2017-03-18 3 views
0

行/バイト/ワードの特定の値を出力する最も簡単な方法はwc -l < filename.shを使用することですが、echoコマンドと組み合わせて使用​​しようとすると出力ではなく物理コマンド自体を印刷します。エコーのあるシェルでの行数の表示

"このファイルにはx行あり"、xは行数ですが、echo "this line has" wc -l < filename.sh "lines"のようにしようとするとコマンド自体が表示されます。私はまた、いくつかの他のものの中で、引用を破ることなくこれを試みました。

これはエコーと一緒には適用されないコマンドなのでしょうか、それとも非常に明白なものがありませんか?

+0

**コマンド置換を提供する '$(コマンド) 'に加えて、* backticks *が使用されています。 '\'コマンド\ ''(同じものを達成するために古いものとやや廃止されたもの)です。また、心配しないで、* man bash *で見逃すことは非常に明白です。 –

答えて

1
echo "this line has $(wc -l < filename.sh) lines" 
1

printf汎用性:

printf 'this file has %s lines\n' $(wc -l < filename.sh) 

$(command)引数にcommandの出力を変換します。

0

試しこれ:

echo "this file has `wc -l < filename.sh | awk '{print $1}'` lines" 

説明:

wc -l < filename.sh

``は、最初のコマンドを実行する手段空白なし

awk '{print $1}'プリント数をファイルの行番号を取得します結果を得るには

0

サブシェルまたはパイプがない場合、awkには入力ファイルのレコード数を保持するinbuilt変数NRがあります。印刷はENDブロック内に書き込まれ、最後に結果を印字します。それ以外の場合は、各行の行番号が出力されます。

awk 'END{print "This line has " NR " lines" }' file 
関連する問題