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

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

王林
Libérer: 2024-02-15 10:40:25
avant
1229 Les gens l'ont consulté

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 de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers numéros
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal