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

Table des matières:

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?

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

Vidéo: Quelle est la différence entre les devis simples et doubles dans le shell Bash?
Vidéo: Google astuces, recherche avancée, fonctionnalités cachées - YouTube 2024, Avril
Anonim
Le fait de mettre du texte entre guillemets est une pratique assez courante 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.
Le fait de mettre du texte entre guillemets est une pratique assez courante 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 dans le texte, peu importe celui que vous utilisez, ils fonctionneront exactement de la même manière. Par exemple, ces deux commandes créeront un répertoire nommé Test Directory:

mkdir 'Test Directory' mkdir 'Test Directory'

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

Coefficient d'expansion variable

La différence entre les guillemets simples et les guillemets doubles devient d'autant plus importante que vous utilisez des variables en ligne de commande. Par défaut, bash développera une variable telle que $ test dans la chaîne complète. Tout d’abord, nous assignerons 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

C’est là que la différence entre guillemets simples et simples 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
Image

La même chose fonctionne lorsque vous utilisez le caractère `pour développer une commande sur la ligne de commande. Par exemple, disons 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

Supposons, par exemple, que vous vous trouviez dans un dossier comportant un espace dans le chemin et que vous souhaitiez utiliser la commande ln pour créer un lien symbolique vers un fichier du répertoire en cours. En général, vous devez spécifier le chemin complet lorsque vous utilisez la commande ln. Il est donc beaucoup plus facile d’utiliser `pwd` pour enregistrer le typage.

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

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

Au lieu de cela, vous devrez entourer de guillemets:
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:

É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:
É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é.

Nous devrons plutôt utiliser des guillemets doubles autour de la variable $ f, comme ceci:
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 en revue le cas échéant:

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 à l'intérieur 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.

Conseillé: