$0
是命令名,$1
、$2
等都是后面的参数。所以在声明
ls -lhtr
这将是相应的变量计数:
ls $0
-lhtr $1
我也学到了,如果你不想做以下事情:
chmod +x myScript.sh
./myScipt.sh param1 # in this case, "./myScript.sh" is $0 and "param1" is $1
你可以运行
sh myScript.sh param1
然而,在第二个例子中,sh
会是$0
吗?或者myScript.sh
会是$0
(根据myScript.sh中的源代码(?
另外,如果我给加了别名怎么办
alias myScript="sh myScript.sh"
myScript
、sh
或myScript.sh
会是$0
吗?
脚本中的每个命令都不会更改这些变量。当您执行时
sh scriptname foo bar baz
shell从操作系统接收参数。在C中,它的argv
数组看起来像:
argv[0] = "sh"
argv[1] = "scriptname"
argv[2] = "foo"
argv[3] = "bar"
argv[4] = "baz"
然后,它从中创建shell变量。argv[0]
没有被放入shell变量中,其余的被放入$0
、$1
、$2
,依此类推,所以您得到:
$0 = scriptname
$1 = foo
$2 = bar
$3 = baz
脚本可以使用内置的set
更新从$1
开始的参数,也可以使用内置shift
从参数列表的开头删除参数(这通常用于从左到右处理参数的循环(。
当您编写类似的命令时
ls "$1"
它指的是脚本的参数,而不是命令行上的参数。