Неожиданное поведение команды watch

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

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

Однако следующая команда работает хорошо.

watch "ls -l| wc -l"

Чем объясняется такое поведение?

1 ответ

Это потому, что оболочка расширяет тылы перед watch когда-либо выполняется. Если вы используете set -xвы увидите, что команда, которая на самом деле вызывает

watch "echo 42"

что объясняет, почему это всегда то же самое.

Вы можете избежать ` с обратной косой чертой, чтобы передать это буквально:

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

Или проще, используя одинарные кавычки, которые запрещают все расширения:

watch 'echo `ls -l | wc -l`'
Другие вопросы по тегам