Maison > Article > Tutoriel système > Comment faire la distinction entre $() et ${} et $(()) et (()) dans le shell bash
Dans le shell bash, $( ) et ` ` (backticks) sont tous deux utilisés pour la substitution de commandes. Et $() peut être utilisé dans chaque shell. Si vous utilisez bash2, ce ne sera pas un problème...
Regardez ${ }... il est en fait utilisé pour la substitution de variables. En général, il n'y a aucune différence entre $var et ${var}. Mais utiliser ${ } définira plus précisément la portée des noms de variables.
Ici, je vais utiliser quelques exemples pour illustrer certaines des fonctions spéciales de ${ } :
Supposons que nous définissions une variable comme :
file=/dir1/dir2/dir3/my.file.txt
Nous pouvons utiliser ${ } pour remplacer chacun pour obtenir des valeurs différentes :
${file#*/} : Supprimez le premier / et la chaîne à gauche : dir1/dir2/dir3/my.file.txt
${file##*/} : Supprimez le dernier / et la chaîne à gauche : my.file.txt
${file#*.} : Supprimez le premier . et la chaîne à gauche : file.txt
${file##*.} : Supprimez le dernier . et la chaîne à gauche : txt
${file%/*} : Supprimez le dernier / et la chaîne à droite : /dir1/dir2/dir3
${file%%/*} : Supprimez le premier / et la chaîne à droite : (valeur nulle)
${file%.*} : Supprimez le dernier . et la chaîne à droite : /dir1/dir2/dir3/my.file
${file%%.*} : Supprimez le premier . et la chaîne à droite : /dir1/dir2/dir3/my
# consiste à retirer le côté gauche (# est à gauche de $ sur la plaque d'évaluation)
% signifie supprimer le côté droit (% est du côté droit de $ sur le tableau)
Un seul symbole correspond à la correspondance minimale ; deux symboles correspondent à la correspondance maximale.
${file:0:5} : Extrayez les 5 octets les plus à gauche : /dir1
${file:5:5} : Extrayez 5 octets consécutifs à droite du 5ème octet : /dir2
On peut également remplacer la chaîne dans la valeur de la variable :
${file/dir/path} : Remplacez le premier répertoire par path:/
chemin1/dir2/dir3/my.file.txt
${file//dir/path} : Remplacez tous les répertoires par path:/
chemin1/chemin2/chemin3/mon.fichier.txt
Utilisez ${ } pour attribuer des valeurs à différents états de variable (non défini, valeur nulle, valeur non nulle) :
${file-my.file.txt} : Si $file n'est pas défini, utilisez my.file.txt comme valeur de retour. (Les valeurs nulles et non nulles ne seront pas traitées)
${file:-my.file.txt} : Si $file n'est pas défini ou est vide, utilisez my.file.txt comme valeur de retour. (Les valeurs non nulles ne seront pas traitées)
${file+my.file.txt} : Si $file est défini sur une valeur nulle ou une valeur non nulle, my.file.txt sera utilisé comme valeur de retour. (Aucun traitement ne sera effectué s'il n'est pas défini)
${file:+my.file.txt} : Si $file est une valeur non vide, utilisez my.file.txt comme valeur de retour. (Aucun traitement ne sera effectué s'il n'y a pas de paramètre ou de valeur vide)
${file=my.file.txt} : si $file n'est pas défini, utilisez my.file.txt comme valeur de retour et attribuez $file à my.file.txt. (Les valeurs nulles et non nulles ne seront pas traitées)
${file:=my.file.txt} : si $file n'est pas défini ou est vide, utilisez my.file.txt comme valeur de retour et attribuez $file à my.file.txt. (Les valeurs non nulles ne seront pas traitées)
${file?my.file.txt} : Si $file n'est pas défini, envoyez my.file.txt vers STDERR. (Les valeurs nulles et non nulles ne seront pas traitées)
${file:?my.file.txt} : Si $file n'est pas défini ou est vide, envoyez my.file.txt vers STDERR. (Les valeurs non nulles ne seront pas traitées)
La compréhension ci-dessus est que vous devez clairement distinguer les trois états d'affectation : non défini, nul et non nul.
D'une manière générale, : est lié à null S'il ne contient pas :, null ne sera pas affecté. S'il contient :, null sera également affecté.
De plus, ${#var} peut calculer la longueur de la valeur de la variable :
${#file} obtient 27 car /dir1/dir2/dir3/my.file.txt fait exactement 27 octets...
Il est utilisé pour les opérations sur les nombres entiers.
En bash, les symboles arithmétiques entiers de $(( )) sont à peu près les suivants :
+ - * / : "Addition, soustraction, multiplication, division" respectivement.
% : Opération restante
& | ^ ! : opérations "AND, OR, XOR, NOT" respectivement.
Exemple :
wangnc>a=5;b=7;c=2;
wangnc>echo $a + $b
5 + 7
wangnc>echo $(( a + b*c))
19
wangnc>echo $(((a*b)/c))
17
wangnc>echo $(($a +$b*$c))
19
wangnc>
Le nom de la variable dans $(( )) peut être remplacé en ajoutant un symbole $ devant, ou il peut être remplacé sans celui-ci, par exemple :
$(( $a + $b * $c)) peut également obtenir le résultat de 19
De plus, $(( )) peut également effectuer des opérations avec différents nombres de report (tels que binaire, octal et hexadécimal), mais les résultats de sortie sont tous décimaux :
echo $((16#2a)) Le résultat est 42 (hexadécimal à décimal)
(()) Objectif :
En fait, le simple fait d'utiliser (( )) peut également redéfinir les valeurs des variables, ou faire des tests :
a=5; ((a++)) redéfinit $a à 6
a=5 ((a--)) alors a=4
a=5; b=7; ((a < b)) obtiendra une valeur de retour de 0 (vrai).
Les symboles de test courants pour (( )) sont les suivants :
< : inférieur à > : supérieur à
<= : inférieur ou égal à >= : supérieur ou égal à
== : égal à
!= : Pas égal à
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!