如何區分位置參數和選項?
位置參數(
$1
、$2
等)和選項(和/或參數)都直接寫在命令之後,那麼解釋如何區分它們的定義或措辭是什麼?換句話說,如何正式解釋位置參數和選項(和/或參數)之間的區別?
選項(通常也稱為“標誌”或“開關”)是一種類型的命令行參數。命令行參數是出現在實用程序或 shell 函式的命令行上的單個單詞(或帶引號的字元串)。
在呼叫帶有一定數量參數的 shell 腳本或 shell 函式時,每個單獨的參數都可以作為腳本或函式中的位置參數使用。
術語:
“論據”可以是
- 一個“選項”(如
-a
,但僅當實用程序將其辨識為選項時),- 一個“選項參數”(比如if
foo
是一個帶參數的選項),或者-a foo``-a
- “操作數”(也不是選項參數的非選項參數,例如
foo
在-a foo
if-a
中不採用選項參數)。以上所有內容的真實範例(使用 GNU
mv
):mv -t targetdir -f file1 file2
- 參數:
-t
,targetdir
,-f
,file1
, 和file2
- 選項:
-t
和-f
- 選項參數:
targetdir
- 操作數:
file1
和file2
。從POSIX 定義:
$$ An argument is, in $$shell 命令語言,傳遞給實用程序的參數,相當於由 exec 函式之一創建的 argv 數組中的單個字元串。參數是命令名稱後面的選項、選項參數或操作數之一。 $$ An option is an $$命令的參數,該命令通常用於指定實用程序預設行為的更改。 $$ An option-argument is a $$某些選項後面的參數。在某些情況下,選項參數包含在與選項相同的參數字元串中 - 在大多數情況下,它是下一個參數。 $$ An operand is an $$命令的參數,該命令通常用作向實用程序提供完成其處理所需的資訊的對象。操作數通常遵循命令行中的選項。
The positional parameters in a shell script or shell function will be the arguments given on the script’s or function’s command line, regardless of whether the arguments are options, option-arguments or operands.
The positional parameters may also be set using
set -- something "something else" bumblebees
This sets
$1
,$2
and$3
to the three strings and clears any other positional parameters.In this case, the positional parameters no longer have any relation to the arguments passed on the utility’s command line.
See also: