$ argv [1]和$ 1的概念

时间:2019-02-01 06:42:31

标签: linux shell terminal argv

$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

请澄清这些。

1 个答案:

答案 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