Maison  >  Article  >  Tutoriel système  >  Comment faire la distinction entre $() et ${} et $(()) et (()) dans le shell bash

Comment faire la distinction entre $() et ${} et $(()) et (()) dans le shell bash

王林
王林avant
2024-02-15 10:40:25932parcourir

bash shell 中如何区别 $()和${}和$(())和(())

Utilisation de $() et ${} :

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

La méthode de mémorisation est :

# 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...

$(()) Objectif :

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!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer