Ich habe den folgenden Befehl verwendet, um eine Liste der URLs zu erstellen, die ich testen möchte:
echo -e localhost:8080/reports/{promos,promo-updates,scandown}/{130,139,142}{,-unburdened,-burdened}{,.pdf,.xls,.xlsx,.csv,.preload}"\n" >> urls.txt
Leider hatten die an urls.txt
jeden angehängten URLs ein Leerzeichen vor sich (außer natürlich dem ersten). Ich verstehe, warum das passiert ist, und mir ist klar, dass ich es einfach durch einen sed
Ausdruck ausziehen kann, aber ich würde gerne wissen, ob es eine Möglichkeit gibt, es stattdessen zu unterdrücken. (Es mag albern und pedantisch erscheinen, aber es unterscheidet sich nicht von der Präferenz, die so viele Menschen empfinden, wenn sie Katzen nicht "missbrauchen" .)
Ich habe versucht, doppelte Anführungszeichen zu setzen , um die Wortaufteilung zu unterdrücken , aber das hat auch die Klammererweiterung unterdrückt, so dass dies ein No-Go war.
Ich habe versucht, IFS in eine leere Zeichenfolge zu ändern, aber es hat auch nicht funktioniert:
IFS='' echo -e localhost:8080/reports/{promos,promo-updates,scandown}/{130,139,142}{,-unburdened,-burdened}{,.pdf,.xls,.xlsx,.csv,.preload}"\n" >> urls.txt
Es wurde auch nicht in eine neue Zeile geändert:
IFS='\n' echo -e localhost:8080/reports/{promos,promo-updates,scandown}/{130,139,142}{,-unburdened,-burdened}{,.pdf,.xls,.xlsx,.csv,.preload}"\n" >> urls.txt
quelle
Antworten:
Sie können die Klammererweiterung in einem Array speichern und dann wie gewünscht ausgeben:
Dann
oder
Das Echo-Beispiel sieht komisch aus, weil:
IFS=$'\n' echo "${urls[*]}"
Die Variable wird erweitert, bevor die neue env-Variable wirksam wirdBeachten Sie auch den geringfügigen Unterschied im verwendeten Dereferenzierungsarray-Index:
[@]
im printf-Beispiel, um das Array in einzelne Wörter zu erweitern[*]
im Echo-Beispiel, um das Array zu einem einzelnen Wort zu erweitern, wobei die Elemente durch das erste Zeichen von IFS getrennt sindquelle
Verwenden Sie
printf
eingebautes:quelle
Dies ist mit zsh getaggt, daher schlage ich das eingebaute zsh vor
print
:-l
druckt Argumente in separaten Zeilen.quelle
Das Problem ist, dass die Klammererweiterung das Leerzeichen hinzufügt und das Echo die neue Zeile hinzufügt. Behandeln Sie die Newline nach dem Prinzip der Einzelverantwortung separat.
quelle
echo
. Das ist,echo
dass seine Argumente durch Leerzeichen getrennt gedruckt werden.echo
Argumente durch Leerzeichen getrennt werden und die neue Zeile zusätzlich vor jedem Leerzeichen eingefügt wird, anstatt das Leerzeichen zu ersetzen (was sinnvoller wäre). Aus dem Speicher,xargs
hat ein bekanntes Problem sehr ähnlich zu diesem (vor allem mit der-0
Option)