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?

Était-ce utile?

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.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top