Shell

什麼是’ls報價’?

  • March 23, 2021

今天我碰巧按'ls

所以命令是ls'

> ls'
quote> ls'
zsh: command not found: ls\nls
>

誰能告訴我,這是什麼ls quote東西?

由於您打開了一個報價'並按下輸入,shell 想要您關閉報價。quote>提示只是這樣的視覺指示。

這樣您就可以將多行參數傳遞給程序。

例如:

$ echo 'hi
quote> there'

hi
there

由於您鍵入l``s``'``Enter``l``s``'``Enter了 ,這相當於嘗試執行一個名為ls\nls(中間帶有換行符的命令)的命令,該命令不存在,因此 shell 給您一個錯誤。

quote>$PS2(aka $PROMPT2in zsh) 提示,輔助提示字元串。

在您的情況下,主要提示字元串($PS1/ $PROMPT>似乎是邀請您輸入命令的提示字元串。次要命令是邀請您繼續並完成命令的命令。

Enter當命令尚未完成時,它會在您按下後顯示。

zsh中,預設值為,其中$PS2is (記錄在Prompt Expansion / Shell State下):%_>``%_

%_

解析器的狀態,即已在命令行上啟動的 shell 結構(如if和)。for如果給定一個整數,將列印許多字元串;零或負數或沒有整數意味著列印盡可能多的數量。PS2這在提示續行和PS4使用選項進行調試時最有用XTRACE;在後一種情況下,它也將以非互動方式工作。

例如,如果我輸入:

my-PS1-prompt> (while true; do for i in "${var-qwe
subsh while for dquote braceparam>

shell告訴我我仍然需要關閉那個${...}大括號參數擴展,"..."雙引號,完成forandwhile語句並在該命令完成之前關閉子shell並且shell可以開始執行它。

在您的情況下,它告訴您需要關閉該'...'單引號字元串。一旦你這樣做,它會嘗試執行相應的命令並失敗,因為ls<newline>ls你的系統上沒有命令。

請注意Enter,您可以按Escape, Enter(在某些終端上您也可以輸入為Alt+ Enter)或Ctrl+ V, Ctrl+J^J代替按送出給shell。在這種情況下,您將看不到輔助提示,您可以將游標移回第一行。

除了$PS1and之外$PS2,還有$PS3(aka $PROMPT3),用於select語句中, $PS4(aka $PROMPT4) 用於xtrace調試輸出,$RPS1( $RPROMP) 和$RPS2( $RPOMPT2) 與$PS1/類似,$PS2只是它們列印在螢幕的右側。

$PS1,2,3,4來自 Korn shell,而%x特殊序列來自csh(大大擴展了zsh)。 POSIX 指定 all butPS3(因為它沒有指定ksh’sselect語句),但不指定%x序列。

tcsh$prompt並且$rprompt啟發了zsh’s $RPS1/ $PRS2

bashshell 為它的提示符中的特殊序列選擇了一種不同的(也是不幸的)語法,而$PSx不是使用\與/%中的字母不同且不兼容的字母。是特定的。tcsh``zsh``%_``zsh

引用自:https://unix.stackexchange.com/questions/124487