Вопрос по shell, bash – Предотвращение сбоев после подстановки переменных

5

Какой самый элегантный способ использовать переменную оболочки (BASH), которая содержит символы, зарезервированные для подстановки (завершение имени файла), которые вызывают некоторые нежелательные замены? Вот пример:

<code>for file in $(cat files); do
   command1 < "$file"
   echo "$file"
done
</code>

Имена файлов содержат символы, такие как & apos; [& apos; или '' '. У меня есть в основном две идеи:

1) Отключить сглаживание с помощью set -f: оно мне нужно где-то еще

2) Избегайте имен файлов в файлах: BASH жалуется на «файл не найден» когда трубит в стандартный ввод

Спасибо за любое предложение

Edit: The only answer missing is how to read from a file with name containing special characters used for globbing when the filename is in a shell variable "$file", e. g. command1 < "$file".

Ваш Ответ

3   ответа
1

while read вместо.

cat files | while read file; do
    command1 < "$file"
    echo "$file"
done
Error: User Rate Limit Exceeded fungs
5

set -fзатем включите его позже в сценарии сset +f.

Error: User Rate Limit Exceeded fungs
9

set -f а такжеset +f Вы могли бы просто применить одинset -f в подоболочку, так как окружение родительской оболочки не будет затронуто этим вообще:

(
set -f
for file in $(cat files); do
   command1 < "$file"
   echo "$file"
done
)


# or even

sh -f -c '
   for file in $(cat files); do
      command1 < "$file"
      echo "$file"
   done
'

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