En utilisant Bash's arrays, je peux stocker une liste dans une variable de tableau et itérer sur les éléments tout en gardant les chaînes entre guillemets contenant des espaces ou des caractères spéciaux ainsi:Comment puis-je stocker une liste de chaînes entre guillemets dans une variable dans Bourne shell? (Sans tableaux Bash)
LIST=(--foo --bar --baz "test 1 2 3")
for item in "${LIST[@]}"; do
echo "$item"
done
sortie est:
--foo
--bar
--baz
test 1 2 3
J'ai un script qui utilise cette fonctionnalité et malheureusement besoin de le porter pour utiliser les cendres de Busybox (qui ne supporte pas les tableaux). J'essaie de trouver un bon moyen de stocker une liste dans laquelle certains éléments peuvent contenir des espaces, tout en conservant le bon nombre d'éléments de la liste.
Cela ne fonctionne pas, par exemple (divise incorrectement test 1 2 3
en éléments séparés):
LIST='--foo --bar --baz "test 1 2 3"'
for item in $LIST; do
echo "$item"
done
sortie est:
--foo
--bar
--baz
"test
1
2
3"
Un idea I found on the Busybox mailing list est d'utiliser set --
pour remplacer les paramètres de position:
set -- --foo --bar --baz "test 1 2 3"
for item in "[email protected]"; do
echo "$item"
done
La sortie est co rrect:
--foo
--bar
--baz
test 1 2 3
Cependant, cette construction aplatit la liste des arguments de position ([email protected]
), qui ce script aussi utilisations.
Y a-t-il un moyen raisonnable que je puisse avoir mon gâteau et le manger aussi, et simuler plusieurs tableaux arbitraires dans la variante non-Bash sh
?