Pour une raison étrange, j'ai essayé "" "comme séparateur de mots dans les identificateurs, comme dans:
$ export foo'bar=1
>
> ^C
$
Le résultat est comme indiqué ci-dessus, l' id est que l'invite passe à ">" et le système attend évidemment plus d'informations de ma part. Comme vous le voyez, j'ai dû appuyer sur Ctrl-C pour m'échapper. La même chose se produit en utilisant d'autres commandes telles que
$ ls foo'bar
$ mkdir foo'bar
Je suis curieux de savoir tout cela, c'est ce que le sens spécial "" "a dans les commandes de terminal (si spécial en fait qu'il est démonté même à l'intérieur des identifiants).
Extra: En passant, je voudrais également connaître l'ensemble des caractères spéciaux ou non valides dans les noms de fichiers et de dossiers, à la fois sous les systèmes Unix et Windows (pour obtenir le sous-ensemble commun de caractères sûrs) (en particulier, qu'en est-il de tous non ASCII?).
Merci Denis
la source
Réponses:
Le caractère 'est un caractère très puissant lorsqu'il est utilisé dans n'importe quelle commande shell. Fondamentalement, le '(marques d'apostrophe) désactive toutes sortes de transformations ou de modifications. Il considérerait tout ce qui est entouré des marques comme une entité unique, c'est-à-dire un paramètre unique. Il n'y aurait absolument aucune sorte de substitution ou d'expansion.
Exemple:
produirait à la sortie la chaîne
$HOME
elle-même et n'imprimerait pas le chemin vers votre répertoire personnel. Étant donné que les guillemets simples empêchent toute sorte d'expansion, la substitution et simple considère tout ce qui est présent comme un simple paramètre en soi.Si vous souhaitez utiliser l'apostrophe telle quelle, vous devez y échapper:
S'il n'est pas échappé, il attendra que sa paire soit fermée, comme cela s'est produit dans votre premier exemple.
Donc, corrigé, votre commande sera:
REMARQUE: comme l'a remarqué Milan Todorovic, cela ne sera pas valide, car vous ne pouvez pas utiliser d'apostrophe dans ce cas.
la source
Le caractère
'
est un caractère spécial. Vous l'utilisez pour marquer une partie de l'entrée de ligne de commande qui ne sera pas modifiée (par exemple, aucun remplacement pour les caractères génériques). Par exemple:Cela signifie que l'argument pour
ls
étaitbla*
et non pas tout ce qui commence parbla
.La raison pour laquelle vous obtenez du
>
caractère est que vous devez en utiliser un'
pour ouvrir et un'
pour fermer la partie qui ne sera pas modifiée.Si vous souhaitez utiliser
'
dans les noms de dossier , vous devez échapper comme ceci:\'
. Donc, si vous souhaitez répertorier le dossier nommé,foo'bar
vous devez taperls foo\'bar
.Oh, et je ne sais pas s'il est possible d'utiliser
'
dans les noms de variables d'environnement. Je pense que vous ne pouvez pas utiliserexport foo\'bar=1
,J'espère que cela t'aides.
la source