Linoux

  Accueil

Zoom   

Accueil > Administration > Shell > Expansion de la commande
Expansion de la ligne de commande
LinuxInfo
Dezoom

Expansion de la ligne de commande

Avant que la ligne de commande ne soit exécutée, 8 types d'expansion sont réalisés dans l'ordre suivant :

Référence :

Mise à jour : Debian 9.0

1 - Accolages {} : Énumérations

$ echo pre-{un,deux,trois}-post
pre-un-post pre-deux-post pre-trois-post
$ echo pre-{10..13}-post
pre-10-post pre-11-post pre-12-post pre-13-post
$ echo pre-{r..v}-post
pre-r-post pre-s-post pre-t-post pre-u-post pre-v-post
$ echo {p,q,z}xxx{1..3}
pxxx1 pxxx2 pxxx3 qxxx1 qxxx2 qxxx3 zxxx1 zxxx2 zxxx3

2 - Tilde ~ : Répertoires

~ : Répertoire de login ($HOME)

~+ : Répertoire courant ($PWD)

~- : Répertoire précédent ($OLDPWD)

$ cd ~/Téléchargement
$ cd ~/Bureau
$ echo ~ # ~ est le répertoire de login
/home/user
$ echo ~+ # ~+ est le répertoire courant
/home/user/Bureau
$ echo ~- # ~- est le répertoire précédent
/home/user/Téléchargement

3 - Dollard $ : Expansion de paramètre

$ exemple='Ceci est une chaîne de caractères'
$ echo $exemple
ceci est une chaîne de caractères
$ echo %%${exemple}%%
%%ceci est une chaîne de caractères%%
$ set un deux trois quatre
$ echo le nombre de paramètres est $#
le nombre de paramètres est 4
$ echo le paramètre 1 est $1
le paramètre 1 est un
$ echo le paramètre 4 est $4
le paramètre 4 est quatre
$ echo les paramètres sont $@
les paramètres sont un deux trois quatre
$ date
dimanche 13 août 2017, 22:59:26 (UTC+0200)
$ echo le pid de la dernière commande est $$
le pid de la dernière commande est 2167
$ echo le code de sortie de la dernière commande est $?
le code de sortie de la dernière commande est 0

4 - Dollard $ : Substitution de commande

$ echo linux$(uname -r)
linux4.9.0-0.bpo.2-amd64

5 - Dollard $ : Expansion arithmétique

$((calcul)) : le résultat du calcul arithmétique

# Addition, soustraction, multiplication, division, exponentielle : + - * / **
$ echo $(( 1 + 2 ))
3
$ echo $(( 1 + 2 ** 3))
9
$ echo $(((( 1 + 2 ** 3 ))/ 7 ))
1

# Reste de la division
echo $(( 10 % 3 ))
1
# Post-incrémentation - post-décrémentation de variable : var++ var--
$ var=10
$ echo $(( var++ )) # La variable est incrémentée après l'expansion
10
$ echo $var
11

# Pré-incrémentation - pré-décrémentation de variable : ++var --var
$ var=10
$ echo $(( ++var )) # La variable est décrémentée avant l'expansion
11

# Incrémentation "classique"
$ var=10
$ echo $(( var=$var + 2 ))
12
# Changement de signe - conservation du signe : - +
$ var=10
$ echo $(( - $var ))
-10
$ var=-10
echo $(( + $var ))
-10
# Comparaison var1 et var2 : égaux, différents, plus grand, plus grand ou égal, plus petit, plus petit ou égal : == != > >= < <=
# echo $x $y
10 10
$ echo $(( $x == $y ))
1 # x est égal à y : vrai
$ echo $(( $x != $y ))
0 # x est différent de y : faux
$ echo $(( 10 >= 10 ))
1 # 10 est supérieur ou égal à 10 : vrai
$ echo $(( 10 > 10 ))
0 # 10 est supérieur à 10 : faux

6 - Caractères d'expansion dans les noms de fichier : [ ] , ? , *

$ touch photo1 photo2 photo3 photoa photob photoc
$ ls photo[1ac]
photo1 photoa photoc
$ ls photo[1-3]
photo1 photo2 photo3
$ ls photo[a-c]
photoa photob photoc
$ ls photo[^1ac]
photo2 photo3 photob
$ ls ph?toc
photoc
$ ls p*c
photoc

7 - Caractères d'échappement \ , ' ' , " "

7.1 - Définition

$ echo $exemple \$exemple ~ \~
ceci est une chaîne de caractères $exemple /home/nom_utilisateur ~
$ echo '$exemple \$exemple ~ \~'
$exemple \$exemple ~ \~
$ echo "$exemple \$exemple ~ \~"
ceci est une chaîne de caractères $exemple ~ \~

7.2 - Exemples

$ echo ~
/home/user

$ echo toto{a,b,d,e}
totoa totob totod totoe

$ echo $((3^5/2*4))
11

$ echo $(date)
samedi 21 octobre 2017, 19:35:51 (UTC+0200)

$ variable="Démonstration"
$ echo $variable
Démonstration
$ echo "toto{a,b,c}"
toto{a,b,c}

$ echo "$(uname -r)"
4.9.0-4-amd64

echo "\$(uname -r)"
$(uname -r)
$ echo '$(uname -r)'
$(uname -r)

7.3 - Échappement des guillemets simples et doubles

$ echo "c'est un guillemet simple entre des guillemets doubles"
c'est un guillemet simple entre des guillemets doubles
$ echo '"bonjour"'
"bonjour"
$ echo 'bonjour'\''bonsoir'
bonjour'bonsoir

La solution consiste à terminer la première partie de la commande (bonjour), échapper l'apostrophe à laisser passer (\'), puis terminer la commande (bonsoir)