これについて Web を検索してきましたが、引用符を入力しただけで UNIX シェル端末が何をしているのか理解できません」
$ "
そして、それはあなたにそのようなものを与えます
>
テキストとおそらくコマンドを入力できる場所。次に、単一引用符文字 " を再度入力すると、> プロンプトが終了し、通常の $ プロンプトに戻ります。
"
コマンドラインでbash
、二重引用符で囲まれた文字列を開始します(以前に別の文字列があった場合は終了します)(かなり明白な命名規則)。'
単一引用符で囲まれた文字列を開始します。bash
は、これらがペアで発生することを想定しており、いずれかのタイプの引用符のペアで囲まれた文字列全体が、それらの中で展開および/または結合される方法に関する異なる規則に従います。1 つしか入力していないので"
、bash
はさらに入力を読み続け、終了引用符を入力するのを待ってから、何を求めているかを判断します。
両方のタイプの引用符は、ファイル、コマンド、引数などの名前を付けるのに役立ちます。そうでなければ、スペースやその他の文字で分割されます。単一引用符は、変数が文字列内で展開される方法にも影響します。これらは最も一般的な用途ですが、他にもあります。詳細man bash
については、こちらをお読みください。
これは、Bash のマニュアルに次のように記載されています。
3.1.2.3 二重引用符
文字を二重引用符 ('"') で囲むと、引用符内のすべての文字のリテラル値が保持されます。 . 文字 '$' および '</code>' は、二重引用符内でその特別な意味を保持します (シェル展開を参照してください). バックスラッシュは、次の文字のいずれかが続く場合にのみ、その特別な意味を保持します: '$', '`', '"'、'\'、または改行。二重引用符内で、これらの文字のいずれかが続くバックスラッシュは削除されます。特別な意味を持たない文字の前のバックスラッシュは変更されません。二重引用符は、その前にバックスラッシュを付けることにより、二重引用符内で引用できます。有効にすると、「!」が指定されていない限り、履歴拡張が実行されます。二重引用符で囲まれたものは、バックスラッシュを使用してエスケープされます。「!」の前のバックスラッシュ 削除されません。
単一の二重引用符を入力すると、Bash は 2 番目の二重引用符が終了するのを待っています。
まだ 1 つのコマンドとして扱っていることを示しています。これにより、読みやすくするために、長いコマンドを複数の行にフォーマットできます。
私の知る限り、括弧またはバックスラッシュは、ほとんどのシェルで同じ機能を提供します。
編集:チャールズ・ダフィーのコメントに+1 。上記の 3 つの違いをさらに詳しく説明するためだけに (私は気づかなかったので、それらを指摘するのに役立つかもしれません)。Bash シェル (OSX) の場合:
Charles Duffy が述べたように、引用符を使用すると、複数の行にわたって議論を行うことができます。ただし、改行文字は引数の一部になります。たとえば、次のようになります。
$ touch "hello
> world"
名前の一部として改行制御文字を含むファイル名が得られます。
1 行の終わりにバックスラッシュを追加すると、複数行モードに入りますが、同じコマンドに引き続き追加されます。
$ touch hello \
> world
と同じ結果が得られますtouch hello world
(つまり、2 つのパラメータを touch & に渡し、2 つのファイルhello
andを作成しますworld
)。
括弧を使用すると、コマンドを連鎖させることができるため、次のようになります。
$ (touch hello
> world)
touch hello
そして を実行します。つまり、1 行world
で実行するのと同じです。touch hello; world
(おそらく-bash: world: command not found
世界コマンドを与える)。
したがって、引用符は複数行の入力に入り、その一部として入力した改行文字も保持されます。
六シアン化物が言ったように、あなたの命令が完了するのを待っています。
二重引用符はシェル変数を展開します。したがって、変数を使用してコマンドを作成できます。例を追加します:
kent$ x=eq
kent$ "s$x" 3
1
2
3