端末コマンドでの「 '」(アポストロフィ)の意味


11

奇妙な理由で、識別子の単語の区切り文字として「 '」を試しました。

$ export foo'bar=1
> 
> ^C
$ 

上記のように、結果は、あるEST ID「>」プロンプトが、システムは、明らかに私の部分についての詳細を待ちます。ご覧のとおり、脱出するにはctrl-Cを押す必要がありました。同じことが他のコマンドなどでも起こります

$ ls foo'bar
$ mkdir foo'bar

私はこれすべての意味に興味があります。それが、ターミナルコマンドで「 '」が特別な意味を持っていることです(実際、idの内部でも分解されるので非常に特別です)。

補足:余談ですが、UnixライクなシステムとWindowsシステムの両方で(安全なものの共通サブセットを取得するため)、ファイル名とフォルダ名の特殊文字または無効な文字のセットも知りたいです(特に、すべてのことについて)非ASCII?)。

ありがとう、デニス


Linuxの世界では、\ 0(null)と/を除くすべての文字が許可されます。ただし、それがすべて推奨されるわけではありません。多くの人は、シェルにとって特別な意味を持つ文字を避けるのが最善だと考えています。Windowsについて知りたい場合は、Windowsリファレンスを参照してください。
Scott Severance

回答:


15

'文字は、シェルコマンドで使用される場合は常に非常に強力な文字です。基本的に '(アポストロフィ記号)は、あらゆる種類の変換または変更を無効にします。'マークで囲まれているものはすべて単一のエンティティ、つまり単一のパラメーターと見なされます。絶対に、いかなる種類の置換または拡張も行われません。

例:

 $ echo '$HOME'

出力で文字列$HOME自体を生成し、ホームディレクトリへのパスを出力しません。一重引用符はあらゆる種類の展開を防ぐため、substitution and simpleは、それ自体が単純なパラメーターとして存在するものは何でもと見なします。

アポストロフィをそのまま使用する場合は、エスケープする必要があります。

 $ mkdir foo\'bar

 $ cd foo\'bar

エスケープされていない場合は、最初の例で発生したように、ペアが閉じるまで待機します。

したがって、修正すると、コマンドは次のようになります。

 $ export foo\'bar=1

注: Milan Todorovicが気づいたように、この場合はアポストロフィを使用できないため、これは無効になります。


1
@ denis63あなたが見る必要があるものであるならば、答えを受け入れてください:)
Rinzwind

7

キャラクター'は特殊キャラクターです。これを使用して、変更されないコマンドラインエントリの一部をマークします(たとえば、ワイルドカードの置換なし)。例えば:

$ ls 'bla*'
ls: cannot access bla*: No such file or directory

これは、lsbla*で始まったすべてではなくであったことを意味しますbla

>キャラクターが出るのは、変更しない部分'を開く'部分と閉じる部分を使う必要があるからです。

'フォルダ名で使用する場合は、次のようにエスケープする必要があります\'。という名前のフォルダを一覧表示foo'barする場合は、と入力する必要がありますls foo\'bar

ああ、'環境変数名で使用できるかどうかはわかりません。使えないと思いますexport foo\'bar=1

お役に立てれば。


環境変数名の制限についての観察に賛成票を投じてください。
Frantique

まだ賛成できません(askubuntuの新機能)。env var名について確認したところ、あなたの言うとおりです。(区切り文字を自分で開いたり閉じたりすることを考えなかったのは少しばかげた気がしますが、「 '」は単一引用符ではなく、実際のアポストロフィと見なしていました)。デニス
デニス
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.