1
由於$#
似乎無法在搜索引擎上正確顯示,因此很難在此搜索答案。我很好奇爲什麼argv
通常包含命令名稱本身,而$#
沒有。
使其更清晰,如果我有一個名爲testing.sh
#!/bin/bash
echo $#
./testing.sh
回報0
而不是1
腳本。爲什麼?
由於$#
似乎無法在搜索引擎上正確顯示,因此很難在此搜索答案。我很好奇爲什麼argv
通常包含命令名稱本身,而$#
沒有。
使其更清晰,如果我有一個名爲testing.sh
#!/bin/bash
echo $#
./testing.sh
回報0
而不是1
腳本。爲什麼?
bash
是繼POSIX specification for $#
:
擴展爲位置參數的十進制數。命令名稱(參數0)不應計入由'#'給出的數字中,因爲它是一個特殊參數,而不是位置參數。
shell的參數接口與C完全不同。在bash
方面,可以定義
argv=("$0" "[email protected]")
argc=${#argv[@]}
由於Shell(理智)從命令的參數分隔命令名稱。
順便說一句,將來你可能會標記'sh'而不是'bash'這樣的問題 - 因爲它存在於POSIX sh中,標準bash主要試圖遵從(就像ksh,ash/dash和好多其它的)。 Bash標記的問題往往只能被那些知道bash的人看到,而人們在不熟悉bash擴展的情況下使用ksh或POSIX sh自己處理時,通常也會查看標記爲sh的問題。 –