内部にコマンドがある文をどのように続けるのですか


12

たとえば、スクリプトファイルで "現在10人のユーザーがオンラインです"と言っています。

次の行の「現時点でオンラインの人々」の部分がなければ、コマンドを機能させることはできません。

現時点では、私は持っています

w='who | wc -l' 
echo "There are $w people online at the moment" 

しかし、私は常に出力になります

There are who | wc -l users online at the moment 

途中でコマンドをどのように機能させるのですか?私は例を探してコピーしようとしましたが、それは私のコマンド置換の問題を解決しないようです。

回答:


20

あなたはの出力が欲しい

who | wc -l

wその文字列ではなくに割り当てられます。これは、引用符で囲まれているために得られるものです。コマンド置換を使用する必要があります$(...)

w=$(who | wc -l)
echo "There are $w people online at the moment"

(逆引用符も使用できますが、それらを簡単にネストすることはできません)。


Bashを含む一部のシェルでは、逆引用符をネストできます。これは、ネストされたエスケープを必要とする時の例を参照してくださいstackoverflow.com/a/2657037/776723
ShadSterling

1
@Polyergicありがとう。私は答えを更新しましたが、私は$()自分自身をネストすることに固執すると思います;
アントン14

10

別の解決策:

echo There are $(who | wc -l) people online at the moment


5

バックティックを使用してコマンドを実行する必要があります

w=`who | wc -l` echo "There are $w people online at the moment"


14
参照してくださいなぜ$(...)バッククォートより好ましい ...
jasonwryan

7
有効なポイント。「バックティックも一重引用符と簡単に混同されます。」ここで何が起こったのか。
ガニマ14

@Ghanima:確かに!この質問は、逆流防止を避けるべき理由を示す必要がある場合の良い例です。:)
PM 2リング14

良い、私はこの答えだけを支持しました。なぜなら、OPがどこにミスを犯したかを正確説明した唯一の答えだからです。バッククティックが良いか悪いかは、単なる副次的なものです。
ルスラン14
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.