J'ai utilisé la commande suivante pour créer une liste d'URL que je veux tester:
echo -e localhost:8080/reports/{promos,promo-updates,scandown}/{130,139,142}{,-unburdened,-burdened}{,.pdf,.xls,.xlsx,.csv,.preload}"\n" >> urls.txt
Malheureusement, les URL ajoutées à urls.txt
chacune avaient un espace devant elles (sauf la première, bien sûr). Je comprends pourquoi cela s'est produit, et je me rends compte que je pourrais simplement le retirer en passant par une sed
expression, mais j'aimerais savoir s'il existe un moyen de le supprimer à la place. (Cela peut sembler idiot et pédant, mais ce n'est pas différent de la préférence que tant de gens ressentent pour ne pas «abuser des chats» .)
J'ai essayé les guillemets doubles pour supprimer la séparation des mots , mais cela a également supprimé l'expansion de l'accolade, donc c'était un non-go.
J'ai essayé de changer IFS en une chaîne vide, mais cela n'a pas fonctionné non plus:
IFS='' echo -e localhost:8080/reports/{promos,promo-updates,scandown}/{130,139,142}{,-unburdened,-burdened}{,.pdf,.xls,.xlsx,.csv,.preload}"\n" >> urls.txt
Pas plus que de le changer en une nouvelle ligne:
IFS='\n' echo -e localhost:8080/reports/{promos,promo-updates,scandown}/{130,139,142}{,-unburdened,-burdened}{,.pdf,.xls,.xlsx,.csv,.preload}"\n" >> urls.txt
la source
Réponses:
Vous pouvez stocker l'extension d'accolade dans un tableau, puis la générer à la manière de votre choix:
alors
ou
L'exemple d'écho est étrange car:
IFS=$'\n' echo "${urls[*]}"
parce que la variable est développée avant que la nouvelle variable env prenne effetNotez également la différence subtile dans l'index de tableau de déréférencement utilisé:
[@]
dans l'exemple printf pour étendre le tableau en mots individuels[*]
dans l'exemple d'écho pour développer le tableau en un seul mot, avec des éléments séparés par le premier caractère d'IFSla source
Utilisez
printf
builtin:la source
C'est tagué zsh, donc je suggère le builtin zsh
print
:-l
imprime les arguments sur des lignes distinctes.la source
Le problème est que l'extension d'accolade ajoute de l'espace, et l'écho ajoute la nouvelle ligne. Donc, en utilisant le principe de responsabilité unique, gérez la nouvelle ligne séparément.
la source
echo
. C'estecho
cela qui imprime ses arguments séparés par des espaces.echo
arguments sont séparés par des espaces et la nouvelle ligne est insérée en plus avant chaque espace au lieu de remplacer l'espace (ce qui serait plus judicieux). De mémoire,xargs
a un problème connu très similaire à celui-ci (en particulier avec l'-0
option)