Je veux pouvoir remplir les éléments d'un tableau avec des chaînes arbitraires, c'est-à-dire des chaînes qui peuvent contenir des \ et des espaces par exemple. J'ai écrit ceci :
#!/bin/bash
function populate_array () {
if [ "$#" -gt 0 ] ; then
# Enter array w/ elements as argument of executable
array=($@)
n=$#
else
# Invoke executable with no arg,, enter array element later
read -p "Enter array elements separated by spaces: " -a array
n=${#array[@]}
fi
printf "%d array elements \n" "$n"
}
populate_array "$@"
while (("$n" > 0)) # while [ "$n" -gt 0 ] ALSO WORKS
do
printf "%s \n" "${array[$n-1]}"
n=$n-1
done
exit 0
Le bloc while sert uniquement à vérifier les éléments du tableau. La fonction est suffisamment simple pour fonctionner correctement pour les arguments qui ne contiennent pas de code space
o \
. Pas autrement.
Essayer d'entrer des arguments à l'exécutable comme :
#!> bash [scriptname] lkl1239 343.4l 3,344 (34) "lklk lkl" lkaa\ lkc
J'aimerais voir 6 arguments :
lkl1239
343.4l
3,344
(34)
lklk lkl
lkaa lkc
Au lieu de ça, on me jette :
- Para
(
=> bash : erreur de syntaxe près du jeton inattendu '34'. - Les chaînes contenant un espace sont interprétées comme des chaînes x+1, où x est le nombre d'espaces non consécutifs, ni au début, ni à la fin d'une ni au début ni à la fin d'une chaîne.
- Bash ignore ce qui vient après la première occurrence de
\
Comment cela se passe-t-il ?