2016-12-30 74 views
-1

我想用来监视目录中文件数量的以下命令不会动态显示所需的值。监视命令的意外行为

watch "echo \`ls -l| wc -l\`" 

但是下面的命令工作正常。

watch "ls -l| wc -l" 

这种行为的解释是什么?

+0

Stack Overflow是编程网站

你可以用一个反斜杠逃脱'从字面上传递和发展问题。这个问题似乎与题目无关,因为它不涉及编程或开发。请参阅帮助中心的[我可以询问哪些主题](http://stackoverflow.com/help/on-topic)。也许[超级用户](http://superuser.com/)或[Unix&Linux堆栈交换](http://unix.stackexchange.com/)会是一个更好的地方。另请参阅[我在哪里发布关于Dev Ops的问题?](http://meta.stackexchange.com/q/134306) – jww

回答

1

这是因为在执行watch之前,shell会扩展反引号。如果你使用set -x,你会看到,在调用

watch "echo 42" 

,实际上最终的命令,它解释了为什么它总是一样的。通过使用单引号,抑制所有扩展

watch "echo \`ls -l | wc -l\`" 

或者更容易:

watch 'echo `ls -l | wc -l`' 
+1

PS:[停止使用反引号](http://mywiki.wooledge.org/BashFAQ/082 ) –