今日は偶然押しましたが、'
命令ls
はls'
> ls'
quote> ls'
zsh: command not found: ls\nls
>
何が起こったのか教えてくれる人はいますかls quote
?
答え1
引用符を開いて'
Enterを押したため、シェルは引用符を閉じると予想します。このquote>
ヒントは、このタイプを視覚的に表示したものにすぎません。
これにより、プログラムに複数行の引数を渡すことができます。
たとえば、
$ echo 'hi
quote> there'
hi
there
と入力したため、これは存在しないコマンド(途中で改行されたコマンド)をls'Enterls'Enter実行しようとするのと同じで、シェルでエラーが発生します。ls\nls
答え2
これは(別名)プロンプト、セカンダリプロンプト文字列quote>
です。$PS2
$PROMPT2
zsh
あなたの場合、デフォルトのプロンプト文字列($PS1
/ $PROMPT
)は>
コマンドを入力するように招待する文字列のようです。 2番目のコマンドは、コマンドを継続して完了するように招待するコマンドです。
コマンドを押しEnterたがまだ完了していないときに表示されます。
でzsh
のデフォルト値はで、ここでは(で説明されています)。$PS2
%_>
%_
プロンプト拡張/シェル状態):
%_
パーサーの状態、つまりコマンドラインから始まるシェル構成(たとえば、
if
および)。for
整数が与えられると、多くの文字列が印刷されます。ゼロまたは負の数または整数がない場合は、できるだけ多くの値を印刷することを意味します。これは、連続した行をプロンプトし、PS2
オプションを使用してPS4
デバッグするときに最も便利ですXTRACE
。後者の場合、非対話式でも機能します。
たとえば、次のように入力すると:
my-PS1-prompt> (while true; do for i in "${var-qwe
subsh while for dquote braceparam>
シェルは、コマンドが完了し、シェルが実行を開始する前に、中括弧パラメータ${...}
拡張、"..."
二重引用符をオフにして、for
ステートメントを完成させ、サブシェルを閉じる必要があることを知らせます。while
あなたの場合、一重引用符で囲まれた文字列を閉じる必要があるというメッセージが表示されます'...'
。これはそのコマンドを実行しようとしますが、ls<newline>ls
システムにコマンドがないため失敗します。
、(一部の端末では+を入力することもできます)、または+、+をEnter押すことなく、現在の行の代わりに編集バッファにリテラル改行(別名)を入力できます。シェルに提出してください。この場合、セカンダリプロンプトは表示されず、カーソルを最初の行に戻すことができます。EscapeEnterAltEnterCtrlVCtrlJ^J
$PS1
また、(aka)forステートメント、(aka)デバッグ出力が$PS2
あり、()と()は画面の右側に印刷されることを除いて/に似ています。$PS3
$PROMPT3
select
$PS4
$PROMPT4
xtrace
$RPS1
$RPROMP
$RPS2
$RPOMPT2
$PS1
$PS2
$PS1,2,3,4
Kornシェルでは、%x
特殊シーケンスはcsh
(by zsh
)から来ます。 POSIX は、以下以外を指定します。PS3
ksh
( の文を指定しないためselect
) ただし、%x
シーケンスは指定されません。
tcsh
でインスピレーションを$prompt
受けた/ 。$rprompt
zsh
$RPS1
$PRS2
シェルは/の文字とは反対であり、異なる互換性のない文字を使用して、特殊シーケンスのプロンプトbash
から別の(そして不幸な)構文を選択します。具体的です。$PSx
\
%
tcsh
zsh
%_
zsh