Dans cet exemple particulier, cela ne fait aucune différence. Cependant, l' {}
en ${}
sont utiles si vous souhaitez étendre la variable foo
dans la chaîne
"${foo}bar"
puisque "$foobar"
développerait plutôt la variable identifiée par foobar
.
Les accolades sont également nécessaires sans condition lorsque:
- expansion des éléments du tableau, comme dans
${array[42]}
- en utilisant des opérations d'expansion de paramètres, comme dans
${filename%.*}
(supprimer l'extension)
- extension des paramètres de position au-delà de 9:
"$8 $9 ${10} ${11}"
Faire cela partout, au lieu de simplement dans des cas potentiellement ambigus, peut être considéré comme une bonne pratique de programmation. C'est à la fois pour la cohérence et pour éviter les surprises comme $foo_$bar.jpg
, où il n'est pas évident visuellement que le trait de soulignement fasse partie du nom de la variable.
{}
est connu comme l' expansion de l'orthèse .${}
est connu comme l'expansion variable. Ils font des choses différentes. Je vous voterais à part le bit sans expansion.$()
est utilisé pour exécuter une commande, telle qu'ellemd5sum=$(md5sum foo.bin)
stockera la sortie demd5sum foo.bin
dans la variablemd5sum
, désormais accessible via${md5sum}
. De plus, +1 et bien d'autres encore dans l'esprit d'OP pour avoir mentionné que c'est une bonne pratique d'être explicite!$()
exécute sa commande à partir d'un sous - shell .${1:-20}
est une forme d'expansion des paramètres. Ici, ce n'est pas évident car il utilise principalement des chiffres et des opérateurs arithmétiques qui nous trompent en pensant qu'il y a de l'arithmétique, mais il se réfère en fait au paramètre positionnel$1
qui, s'il n'est pas défini, sera remplacé par une valeur par défaut20
(la syntaxe est${variable:-default_value}
).Les variables sont déclarées et affectées sans
$
et sans{}
. Vous devez utiliserassigner. Pour lire à partir de la variable (en d'autres termes, "développer" la variable), vous devez utiliser
$
.Cela m'a parfois dérouté - dans d'autres langues, nous nous référons à la variable de la même manière, qu'elle se trouve à gauche ou à droite d'une affectation. Mais le shell-scripting est différent,
$var=10
ne fait pas ce que l'on pourrait penser!la source
Vous utilisez
{}
pour le regroupement. Les accolades sont nécessaires pour déréférencer les éléments du tableau. Exemple:la source
dir=(*)
. Autant que je sache,dir
est une commande intégrée pour lister le contenu du répertoire (équivalent àls -C -b
). Pourriez-vous s'il vous plaît expliquer?dir
est le nom de la variable et les parenthèses sont utilisées pour collecter l'expansion du nom de fichier*
dans un tableau.Vous pouvez également effectuer une manipulation de texte à l'intérieur des accolades:
Résultat:
ou
Résultat:
Vous avez raison dans "les variables régulières" ne sont pas nécessaires ... Mais c'est plus utile pour le débogage et pour lire un script.
la source
La fin du nom de la variable est généralement indiquée par un espace ou une nouvelle ligne. Mais que se passe-t-il si nous ne voulons pas d'espace ou de nouvelle ligne après avoir imprimé la valeur de la variable? Les accolades indiquent à l'interpréteur shell où se trouve la fin du nom de la variable.
Exemple classique 1) - variable shell sans espace de fin
Exemple 2) Chemin de classe Java avec des fichiers JAR versionnés
(La réponse de Fred le dit déjà mais son exemple est un peu trop abstrait)
la source
Les accolades sont toujours nécessaires pour accéder aux éléments du tableau et effectuer l'expansion des accolades.
Il est bon de ne pas être trop prudent et d'utiliser
{}
pour l'expansion des variables shell même lorsqu'il n'y a pas de place pour l'ambiguïté.Par exemple:
Il est donc préférable d'écrire les trois lignes comme suit:
ce qui est certainement plus lisible.
Puisqu'un nom de variable ne peut pas commencer par un chiffre, le shell n'a pas besoin de
{}
variables numérotées (comme$1
,$2
etc.) à moins qu'une telle expansion ne soit suivie d'un chiffre. C'est trop subtil et cela rend l'utilisation explicite{}
dans de tels contextes:Voir:
la source
It's good to be not over-cautious
: Je me demande ce que la plupart des gens pensent. Utilisez des accolades tout le temps pour ne pas les oublier quand vous en avez besoin, ou utilisez-les uniquement là où vous en avez besoin, pour améliorer la lisibilité.Suite à la suggestion de SierraX et de Peter concernant la manipulation de texte, des accolades
{}
sont utilisées pour passer une variable à une commande, par exemple:Disons que vous avez un fichier sposi.txt contenant la première ligne d'un roman italien bien connu:
Sortie:
quel ramo del lago di como che volge a mezzogiorno
Créez maintenant deux variables:
Maintenant, remplacez le mot variable content par celui de new_word , dans le fichier sposi.txt
Sortie:
quel filone del lago di como che volge a mezzogiorno
Le mot "ramo" a été remplacé.
la source
weel-known novel
bit. Ont néanmoins voté.