$argv[1]
和 $1
有什么区别?
$argv[1]
和 $argv[$1]
,哪个是正确的?
我尝试了以下代码并获得了如下输出:
1)
#!/bin/bash
echo "The user $1 is logged on to the system on"
运行方式:bash logs.sh home
输出:用户主目录已登录到系统
2)
#!/bin/bash
echo "The user $argv[1] is logged on to the system on"
运行方式:bash logs.sh home
输出:用户 [1] 已登录系统
3)
#!/bin/bash
echo "The user $argv[$1] is logged on to the system on"
运行方式:bash logs.sh home
输出:用户 [home] 已登录系统
请澄清这些。
最佳答案
对于 bash,我通常会说,玩一下它:
> echo $argv[1]
[1]
> argv=blabla
> echo $argv[1]
blabla[1]
标记 $argv[1]
被解析为 $argv
和 [1]
。 $argv
扩展为变量 argv
值,而 [1]
保持原样。要通过索引访问数组,请使用 {}
,例如。 ${argv[1]}
。您还可以看到,bash 中的数组是从零开始索引的:
> argv=(1 2 3)
> echo ${argv[1]}
2
变量argv
不是bash中变量的特殊名称,它没有特殊含义,并且与传递给脚本的位置参数没有任何关联。要访问参数,请使用 $1
访问第一个参数,$2
访问第二个参数,使用 "$@"
将每个参数扩展为单独的单词,"$*"
将参数扩展为单个单词,$#
获取参数的计数。
$argv[$1]
也没有任何特殊含义。由于未设置 argv 变量,因此 $argv 被扩展为空。脚本的第一个参数是 home
,因此 $1
扩展为 home
。 [
]
在 ${ ... }
大括号之外没有特殊含义。 [
和 ]
保持不变。所以 $argv[$1]
扩展如下
`$argv` + `[` + `$1` + `]`
`` + `[` + `home + `]`
`[home]`
您可以使用简单的函数测试 $1
变量:
> f() { echo $# 1:$1 2:$2 3:$3; }
> f home
1 1:home 2: 3:
> f home kamil salini
3 1:home 2:kamil 3:salini
关于linux - $argv[1] 和 $1 的概念,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54474209/