У меня возникли проблемы с основами написания скриптов на Bash. Вот что у меня так далеко:
#!/bin/bash
FILES="/home/john/my directory/*.txt"
for f in "${FILES}"
do
echo "${f}"
done
Все, что я хочу сделать, это перечислить все .txt
файлы в for
цикле, чтобы я мог с ними что-то делать. Но пространство в my directory
звездочке и в звездочке *.txt
просто не очень красиво. Я пытался использовать его с двойными кавычками и без них, с фигурными скобками на именах переменных и без них, но все еще не могу распечатать все .txt
файлы.
Это очень простая вещь, но я все еще борюсь, потому что я устал и не могу думать прямо.
Что я делаю не так?
Я смог успешно применить приведенный выше сценарий, если мои ФАЙЛЫ не имеют пробела или звездочки ... Мне пришлось экспериментировать с использованием или без использования двойных кавычек и фигурных скобок, чтобы заставить его работать. Но в тот момент, когда у меня есть и пробелы, и звездочка, все портится.
for f in "$DIR"/*.txt
= finefor f in "$DIR/*.txt"
= breaksХотя использование массивов, показанных John1024, имеет гораздо больше смысла, здесь вы также можете использовать оператор split + glob (оставив скалярную переменную без кавычек).
Поскольку вам нужна только глобальная часть этого оператора, вам нужно отключить разделенную часть:
источник
Что вы можете сделать, это оставить только символы подстановки за пределами кавычек.
Что-то вроде:
для a в "файлах с пробелами" * ". Txt"
сделать
обработку
выполненной.
Если сами подстановочные знаки расширяются до пробелов, то вам нужно будет использовать подход файла к строке, например, использовать ls -l для генерации списка файлы и использовать чтение bash, чтобы получить каждый файл.
источник
Когда вы хотите обработать набор файлов, вы считаете, что в их имени может быть пробел или другой код scape, поэтому перед запуском процесса, например,
for loop
илиfind command
установитеIFS bash env variable
для:источник