$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
输出:The user home is logged on to the system on
2)
#!/bin/bash
echo "The user $argv[1] is logged on to the system on"
运行方式:bash logs.sh home
输出:The user [1] is logged on to the system on
3)
#!/bin/bash
echo "The user $argv[$1] is logged on to the system on"
运行方式:bash logs.sh home
输出:The user [home] is logged on to the system on
请澄清这些。
答案 0 :(得分:-1)
对于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