Как заменить команду Linux переменной в цикле for?

Д'ух. Оказывается, перезагрузка сеанса пользователя помогла.

Группа

и id также не отображали новые группы, пока я снова не вошел в систему.

1
15.12.2019, 05:11
1 ответ

У вас есть петля

for filename in *'old Name'*; do
    echo "$filename"
done

и вы хотите изменить шаблон *'old Name'*так, чтобы строка old Nameсохранялась в переменной.

Это можно сделать с помощью

name='old Name'

for filename in *"$name"*; do
    echo "$filename"
done

или просто

printf '%s\n' *"$name"*

Чтобы шаблон работал правильно, его части, содержащие подстановочные знаки имени файла, должны оставаться без кавычек. Поэтому символы *не могут быть частью значения переменной name, если мы заключаем $nameв кавычки. Если бы это было так, то они использовались бы как буквальные символы *, а не как подстановочные знаки.

В то же время мы не хотим использовать nameпеременную без кавычек , так как это разделит ее на два слова в пробеле, и вы получите два отдельных слова. узоры.

Вот почему установка nameв строку old Nameи использование *"$name"*в цикле, как показано выше, вероятно, будет лучшим решением.

1
27.01.2020, 23:40

Теги

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