shell citant le comportement
Question
Je viens d'apprendre que, citant faire une énorme différence dans certains cas, et j'ai fait quelque chose pour le tester, voici ce que je viens de faire,
$ xfs=$(find . -type f -perm -111) #find all files with x-perm
$ echo "$xfs"
./b.out
./a.out
$ echo $xfs
./b.out ./a.out #why all in one line, but the above takes two?
Si $xfs
contient \n
, Autant que je sache, echo -e
permettra d'élargir \n
, mais comment peut echo "$xfs"
prendre 2 lignes?
La solution
N'importe quel espace est normalement dans le shell considéré comme un argument séparateur.Ainsi, votre premier exemple a deux arguments. echo
imprime les arguments séparés par un espace, et c'est le comportement que vous voyez dans votre deuxième exemple.
Toutefois, lorsque vous utilisez des guillemets, quelque chose entre eux, c'est un argument, et il est imprimé, littéralement.L'un argument dans votre premier exemple contient déjà un retour à la ligne, de sorte qu'il est imprimé avec un saut de ligne.
L' -e
option à partir de la bash
echo
builtin régule l'expansion des séquences d'échappement comme \n
;cependant, vous n'avez pas de séquences d'échappement.La variable contient un littéral de saut de ligne.