Les sauts de ligne sont dans la variable. LS=$(ls -1)
définit la variable LS
sur la sortie de ls -1
(qui produit la même sortie que ls
, soit dit en passant, sauf lorsque la sortie est envoyée à un terminal), moins les sauts de ligne de fin.
Le problème est que vous supprimez les sauts de ligne lorsque vous imprimez la valeur. Dans un script shell, $LS
ne signifie pas «la valeur de la variable LS
», cela signifie «prendre la valeur de LS
, la diviser en mots selon IFS
et interpréter chaque mot comme un modèle global». Pour obtenir la valeur de LS
, vous devez écrire "$LS"
, ou plus généralement mettre $LS
entre guillemets doubles.
echo "$LS"
imprime la valeur de LS
, sauf dans certains shells qui interprètent les caractères antislash, et à l'exception de quelques valeurs commençant par -
.
printf "$LS"
imprime la valeur LS
tant qu'il ne contient pas de caractère de pourcentage ou de barre oblique inverse (et avec la plupart des implémentations) ne commence pas par -
.
Pour imprimer la valeur de LS
exactement, utilisez printf %s "$LS"
. Si vous voulez une nouvelle ligne à la fin, utilisez printf '%s\n' "$LS"
.
Notez que ce $(ls)
n'est pas, en général, la liste des fichiers dans le répertoire courant. Cela ne fonctionne que lorsque vous avez des noms de fichiers suffisamment apprivoisés. Pour obtenir la liste des noms de fichiers (sauf les fichiers de points), vous devez utiliser un caractère générique: *
. Le résultat est une liste de chaînes, pas une chaîne, vous ne pouvez donc pas l'affecter à une variable de chaîne; vous pouvez utiliser une variable de tableau files=(*)
dans des shells qui les prennent en charge (ksh93, bash, zsh).
Pour plus d'informations, voir Pourquoi mon script shell s'étouffe-t-il avec les espaces ou d'autres caractères spéciaux?
printf "%s\n" $LS
feraient.