哪个变量在shell中是1美元


我创建了一个参数化的shell脚本。根据我的理解,$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"

myScriptshmyScript.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"

它指的是脚本的参数,而不是命令行上的参数。

最新更新