いくつかの奇妙な理由で、次のように、識別子のワード区切り文字として「 '」を試しました。
$ export foo'bar=1
>
> ^C
$
結果は上記のようになります。id estプロンプトが「>」に変わり、システムは明らかに私の側でさらに情報を待ちます。ご覧の通り、私はctrl-Cで逃げなければなりませんでした。次のような他のコマンドを使用しても同じことが起こります
$ ls foo'bar
$ mkdir foo'bar
私はこのすべての意味に興味があります、それはターミナルコマンドで特別な意味 "" "が持っているものです(実際、id内でも分解されるという特別な意味があります)。
追加:余談ですが、UnixライクなシステムとWindowsシステムの両方で、ファイル名とフォルダー名に含まれる特殊文字または無効な文字のセットを知りたい(安全なものの共通サブセットを取得するため) (特に、すべての非ASCIIについてはどうですか?)。
ありがとう、デニス
'文字は、シェルコマンドで使用される場合は常に非常に強力な文字です。基本的に、 '(アポストロフィマーク)は、あらゆる種類の変換または変更を無効にします。 'マークで囲まれたものはすべて、単一のエンティティ、つまり単一のパラメーターと見なされます。絶対に種類の置換や拡張は行われません。
例:
$ echo '$HOME'
出力で文字列$HOME
自体を生成し、ホームディレクトリへのパスを出力しません。単一引用符は、あらゆる種類の展開を防ぐため、置換と単純は、それ自体が単純なパラメーターとして存在するものを考慮します。
アポストロフィをそのまま使用する場合は、エスケープする必要があります。
$ mkdir foo\'bar
$ cd foo\'bar
エスケープされていない場合、最初の例で発生したように、ペアが閉じられるまで待機します。
したがって、修正すると、コマンドは次のようになります。
$ export foo\'bar=1
注: Milan Todorovicが気づいたように、この場合はアポストロフィを使用できないため、これは無効になります。
文字'
は特殊文字です。これを使用して、変更されないコマンドラインエントリの一部をマークします(たとえば、ワイルドカードの代替はありません)。例えば:
$ ls 'bla*'
ls: cannot access bla*: No such file or directory
これは、ls
の引数がbla*
であり、bla
で始まるものすべてではないことを意味します。
>
文字を取得する理由は、開くのに1つの'
を使用し、変更されない部分を閉じるのに1つの'
を使用する必要があるためです。
フォルダー名に'
を使用する場合は、\'
のようにエスケープする必要があります。したがって、foo'bar
という名前のフォルダーをリストする場合は、ls foo\'bar
と入力する必要があります。
ああ、環境変数名に'
を使用できるかどうかわかりません。 export foo\'bar=1
は使用できないと思いますが、
お役に立てれば。