2015-08-03 34 views
1

由於$#似乎無法在搜索引擎上正確顯示,因此很難在此搜索答案。我很好奇爲什麼argv通常包含命令名稱本身,而$#沒有。

使其更清晰,如果我有一個名爲testing.sh

#!/bin/bash 
echo $# 

./testing.sh回報0而不是1腳本。爲什麼?

+0

順便說一句,將來你可能會標記'sh'而不是'bash'這樣的問題 - 因爲它存在於POSIX sh中,標準bash主要試圖遵從(就像ksh,ash/dash和好多其它的)。 Bash標記的問題往往只能被那些知道bash的人看到,而人們在不熟悉bash擴展的情況下使用ksh或POSIX sh自己處理時,通常也會查看標記爲sh的問題。 –

回答

5

bash是繼POSIX specification for $#

擴展爲位置參數的十進制數。命令名稱(參數0)不應計入由'#'給出的數字中,因爲它是一個特殊參數,而不是位置參數。

shell的參數接口與C完全不同。在bash方面,可以定義

argv=("$0" "[email protected]") 
argc=${#argv[@]} 

由於Shell(理智)從命令的參數分隔命令名稱。

相關問題