/ / Quelle est la différence entre les devis simples et doubles dans le shell Bash?

Quelle est la différence entre les devis simples et doubles dans le shell Bash?

Insérer du texte entre guillemets est assezLa pratique standard sur la ligne de commande, en particulier lorsqu'il s'agit de fichiers comportant des espaces dans les noms, mais comment savoir s'il faut utiliser des guillemets simples ou doubles? Jetons un coup d’oeil à la différence, et quand vous devriez utiliser l’un par rapport à l’autre.

La règle générale est que les guillemets doubles permettent toujours l’agrandissement des variables à l’intérieur des guillemets, contrairement aux guillemets simples. Continue de lire.

Citations avec texte simple

Si vous insérez simplement quelques mots de texte,peu importe celui que vous utilisez, ils fonctionneront exactement de la même façon. Par exemple, ces deux commandes créeront un répertoire nommé Test Directory:

mkdir "Test Directory"
mkdir 'Test Directory'

Les types plus expérimentés noteront probablement que vous pouvez également utiliser mkdir Test Directory si vous le souhaitez.

Shell Variable Expansion

La différence entre guillemets simples et doublesdevient plus important lorsque vous utilisez des variables sur la ligne de commande. Par défaut, bash développera une variable telle que $ test dans la chaîne complète. Nous allons d’abord assigner la variable:

test="This is a test"

Maintenant, vous pouvez utiliser cette variable sur la ligne de commande, comme ceci, qui devrait simplement afficher C'est un test à la console:

echo $test

Là où la différence entre les guillemets simples et doubles devient plus claire — lorsque vous utilisez des guillemets simples, les variables ne seront pas développées. Par exemple, si vous exécutez cette commande:

echo '$test'

Vous ne verrez rien d'autre que "$ test" sur la ligne de commande lorsque vous utilisez des guillemets simples, mais le résultat sera correct lorsque vous utilisez des guillemets doubles:

image

La même chose fonctionne lorsque vous utilisez le caractère `pour développer une commande sur la ligne de commande. Par exemple, supposons que vous vouliez utiliser le pwd commande depuis une autre commande - vous utiliseriez des backticks pour dire au shell de le développer:

echo `pwd`/test

Si vous vous trouviez dans votre dossier de départ, la sortie ressemblerait à ceci:

/ home / geek / test

Disons, par exemple, que vous êtes dans un dossier qui a unvous devez utiliser la commande ln pour créer un lien symbolique vers un fichier du répertoire en cours. En règle générale, vous devez spécifier le chemin complet lorsque vous utilisez la commande ln. Il est donc beaucoup plus facile d’utiliser `pwd` pour enregistrer les saisies.

Regardez ce qui se passe lorsque vous essayez d'utiliser la commande sans inclure de guillemets:

ln –s `pwd`/test /home/geek/linkedname

image

Au lieu de cela, vous devrez entourer de guillemets:

ln –s "`pwd`/filename" /some/other/path

Pour un exemple plus concret, supposons que nous ayons une structure de dossiers comme celle-ci, où tous les noms de fichiers contiennent des espaces:

image

Étant donné que la commande unzip ne prend pas en charge l’utilisation de * pour l’exécuter sur tous les fichiers, vous devez utiliser la commande for à la place. Voici où les choses deviennent intéressantes:

for f in *.zip;do unzip $f;done

Oops! On dirait que ça n’a pas marché.

image

Nous devrons plutôt utiliser des guillemets doubles autour de la variable $ f, comme ceci:

for f in *.zip;do unzip "$f";done

Maintenant, chaque fois que la commande for parcourt la boucle, elle exécutera une commande comme celle-ci:

unzip "test 1.zip"

Bien entendu, il exécuterait une commande similaire pour chaque fichier du répertoire.

Revoyons

Maintenant que nous avons parcouru les exemples, nous allons simplement passer rapidement en revue au cas où vous l’auriez manqué:

Double citation

  • Utilisez cette option lorsque vous souhaitez inclure des variables ou utilisez une extension de shell à l'intérieur d'une chaîne.
  • Tous les caractères sont interprétés comme des caractères normaux à l'exception de $ ou `qui seront développés sur le shell.

Guillemets simples

  • Tous les caractères entre guillemets simples sont interprétés comme un caractère de chaîne.

Et termine ainsi la leçon des citations. Utilisez-les judicieusement.