【问题标题】:Concept of $argv[1] and $1$argv[1] 和 $1 的概念
【发布时间】:2019-02-01 06:42:30
【问题描述】:

$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

请澄清这些。

【问题讨论】:

  • 为什么这个标签是linux-kernelbash 也可以在其他操作系统上运行
  • 在 bash/shell 中没有名为 argv 的变量,而您的测试只是暴露了它。 (在您的测试中,将$argv 替换为空字符串,结果将是一致的)。

标签: linux shell terminal argv


【解决方案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

【讨论】:

  • 为什么投反对票?这个答案有什么问题吗? (除了我的英语不好,对不起......)
猜你喜欢
  • 2023-03-29
  • 2022-01-10
  • 2013-06-20
  • 2018-03-30
  • 1970-01-01
  • 1970-01-01
  • 2016-07-21
  • 2011-03-28
  • 2016-06-17
相关资源
最近更新 更多