Практически во всех случаях, когда вы используете цикл оболочки for
для обработки строк в текстовом файле, лучше использовать awk
или вырезать
или sed
или perl
(или любой другой доступный инструмент для обработки текста). Это будет быстрее, проще и без риска нежелательных побочных эффектов (например, установка IFS перед использованием прочтите
).
Например:
awk '{print "curl -XDELETE '\''ADDRESS:PORT/VALUE/VALUE/"$1"'\''"}' \
/tmp/filename |
sh
(сначала запустите его без подключения к sh, bash, тире и т. Д., Чтобы убедиться, что он выдает правильный результат)
Это делает то, что вы хотите, и помещает URL в одинарные кавычки, чтобы учесть имена файлов. с пробелами, подстановочными знаками глобуса, амперсандами, точками с запятой и т. д. в них. Работает для всех файлов, кроме файлов с одинарными кавычками или новой строкой в имени файла.Последнее невозможно исправить с помощью входного файла, разделенного новой строкой, но первое можно исправить, вставив следующее перед оператором print
:
gsub(/'\''/,"'"'\\\\''"'");
Я недавно написал объяснение того, что это делает здесь: https://unix.stackexchange.com/a/293818/7696
awk '{ gsub(/'\''/,"'"'\\\\''"'");
print "curl -XDELETE '\''ADDRESS:PORT/VALUE/VALUE/"$1"'\''"}' \
/tmp/filename |
sh
Если вы абсолютно уверены, что в именах файлов не будет раздражающих символов, это еще проще:
awk '{ print "curl -XDELETE ADDRESS:PORT/VALUE/VALUE/"$1 }' /tmp/filename | sh