linux - $argv[1] 和 $1 的概念

标签 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

输出:用户主目录已登录到系统

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/

相关文章:

linux - mongodb数据库恢复脚本

linux - 如何在 Linux 上创建支持替换/删除文件的存档?

linux - Unix,替换错误错误?

c - 终端不会使用更新的 a.out,我该如何解决?

c - 如何通过 RPC 发送数组?

linux - Ant:查找:缺少 `-exec' 的参数

python - VSCode 终端不显示所有行

regex - 如何在unix中对编号的文本文件进行排序?

php - 在 Linux 上的内存缓存中存储 session 的问题

linux - awk:致命:无法打开文件 `' 进行读取(没有这样的文件或目录)