Почему less сохраняет свою конфигурацию в двоичном файле?

См. Комментарий @ilkkachu для практических решение для этого случая. Но в противном случае оболочка расширяет переменные перед выполнением каждой строки, поэтому

find ./  -type f -printf "wc -l %p\n" | while read line; do
    $line
done

будет работать нормально (если в именах файлов не найдены специальные символы - например, пробелы).

Обратите внимание, что $ line не имеет кавычек, и мы также не цитируем % p .Это потому, что мы хотим, чтобы оболочка разбивала строку на слова перед выполнением - обрабатывая слова $ line как команду и ее аргументы, как если бы вы написали их сами. Вот почему пробелы не работают.

Этого можно избежать, используя встроенный в оболочку eval , который на самом деле работает так же, как вы вводили команду в оболочке, включая кавычки (которые сейчас вернулись) :

find ./  -type f -printf "wc -l \"%p\"\n" | while read line; do
    eval $line
done

Последний должен работать во всех случаях, но все же не является хорошей практикой. eval должен быть последним средством. Я включил эти параметры, чтобы вы знали, что они работают, но обычно есть более эффективные способы, такие как параметр -exec в find .

3
15.03.2016, 00:52
0 ответов

Теги

Похожие вопросы