2016-12-30 7 views
-1

Следующая команда, которую я хочу использовать для контроля количества файлов в каталоге, не отображает требуемое значение динамически.Неожиданное поведение команды watch

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 Stack Exchange] (http://unix.stackexchange.com/). Также см. [Где я пишу вопросы о Dev Ops?] (Http://meta.stackexchange.com/q/134306) – jww

ответ

1

Это потому, что оболочка расширяет обратные линии до того, как watch когда-либо выполняется. Если вы используете 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) –

 Смежные вопросы

  • Нет связанных вопросов^_^