您如何在内部使用命令继续句子


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 

您如何在中间使用命令?我一直在尝试查找和复制示例,但这似乎无济于事我的命令替换问题。

Answers:


20

您想要的输出

who | wc -l

分配给w,而不是分配给该字符串,这是您获得的,因为它周围有引号。您应该使用命令替换$(...)

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

(您也可以使用反引号,但不能轻松地将其嵌套)。


在某些shell中,包括Bash,您可以嵌套反引号。它需要嵌套的转义,请参见stackoverflow.com/a/2657037/776723上的
ShadSterling 2014年

1
@Polyergic谢谢。我更新了答案,但我想我会坚持嵌套$()自己;-)
Anthon 2014年

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"



7
有效点。“反引号也很容易与单引号混淆。” 到底发生了什么
加尼玛

@加尼玛:的确!这个问题是当我们需要证明为什么应该避免反引号的一个很好的例子。:)
PM 2Ring

很好,我只赞成这个答案,因为它是唯一可以准确解释OP错误所在的答案。反引号是好是坏只是旁注。
Ruslan 2014年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.