Я использовал следующую команду для создания списка URL, которые я хочу протестировать:
echo -e localhost:8080/reports/{promos,promo-updates,scandown}/{130,139,142}{,-unburdened,-burdened}{,.pdf,.xls,.xlsx,.csv,.preload}"\n" >> urls.txt
К сожалению, URL-адреса, добавленные к urls.txt
каждому, имели перед ними пробел (за исключением первого, конечно). Я понимаю, почему это произошло, и я понимаю, что мог бы просто снять его, обнажив sed
выражение лица, но я хотел бы знать, есть ли способ подавить это вместо этого. (Это может показаться глупым и педантичным, но это ничем не отличается от предпочтения, которое многие люди считают « не злоупотреблять кошками» .)
Я пытался использовать двойные кавычки, чтобы подавить разделение слов , но это также подавляло расширение скобок, так что это было запрещено.
Я попытался изменить IFS на пустую строку, но это тоже не сработало:
IFS='' echo -e localhost:8080/reports/{promos,promo-updates,scandown}/{130,139,142}{,-unburdened,-burdened}{,.pdf,.xls,.xlsx,.csv,.preload}"\n" >> urls.txt
Также не изменив его на новую строку:
IFS='\n' echo -e localhost:8080/reports/{promos,promo-updates,scandown}/{130,139,142}{,-unburdened,-burdened}{,.pdf,.xls,.xlsx,.csv,.preload}"\n" >> urls.txt
источник
Ответы:
Вы могли бы сохранить расширение скобки в массиве, а затем вывести его способом по вашему выбору:
затем
или
Пример эха выглядит странно, потому что:
IFS=$'\n' echo "${urls[*]}"
потому что переменная раскрывается до вступления в силу новой переменной envТакже обратите внимание на небольшую разницу в используемом индексе массива разыменования:
[@]
в примере printf, чтобы развернуть массив в отдельные слова[*]
в примере эха, чтобы развернуть массив в одно слово, с элементами, разделенными первым символом IFSисточник
Используйте
printf
встроенный:источник
Это тег zsh, поэтому я предлагаю встроенный zsh
print
:-l
выводит аргументы в отдельных строкахисточник
Проблема в том, что расширение скобки добавляет пробел, а echo добавляет символ новой строки. Таким образом, используя принцип единой ответственности, обрабатывайте новую строку отдельно.
источник
echo
. Вотecho
что выводит свои аргументы через пробел.echo
разделяет аргументы пробелами, и новая строка вставляется перед каждым пробелом вместо замены пробела (что было бы более разумно). По памяти,xargs
есть известная проблема, очень похожая на эту (особенно с-0
опцией)