美文网首页Shell语言用例
bash变量的间接引用

bash变量的间接引用

作者: CodingCode | 来源:发表于2018-12-30 12:01 被阅读0次

今天碰到一个问题,如何打印出传递给bash的所有参数:

本来想用一个for循环实现如下效果:

$ test.sh aa bb
ARGS[#]=3
ARGS[0]=test.sh
ARGS[1]=aa
ARGS[2]=bb

脚本test.sh怎么写呢?

echo "ARGS[#]=$#"
for ((i = 1; i <= $#; i++ )); do
  echo "ARGS[${i}]=[${i}]"
done

循环体里面既要打印参数序号,又要打印对应的参数值,可怎么办呢?上述代码会打印:

ARGS[0]=0
ARGS[1]=1
ARGS[2]=2

因为后面的值,我们其实需要的是二次引用,类似{{i}}格式,但是这个语法bash根本不认:

ENTRY ARGS[${i}]=[${${i}}]: bad substitution

Bash恰好提供了"变量的间接引用"功能,正好满足这种需求。Bash使用叹号!(exclamation mark)来表明这是一个间接引用(indirect reference), 语法格式就是:

${!variable}

其含义是显示变量variable的值所对应的变量值。例如:

#!/bin/bash

AA=BB
BB=CC

echo ${AA}
echo ${!AA}

运行脚本得到:

BB
CC

因为"${!AA}"等价于"${BB}",所以最后显示"CC"。

回来开头的遍历参数的问题:

echo "ARGS[#]=$#"
for ((i = 1; i <= $#; i++ )); do
  echo "ARGS[${i}]=[${!i}]"
done

就完美了解决了。

相关文章

  • bash变量的间接引用

    今天碰到一个问题,如何打印出传递给bash的所有参数: 本来想用一个for循环实现如下效果: 脚本test.sh怎...

  • Shell Bash 的内部变量

    $BASH 变量 —— 用于引用 Bash 实例的全路径名。变量的值如下所示: $HOME 变量 —— 当前用户的...

  • Go 语言学习笔记-指针、切片与结构体

    指针 指针就是地址。指针变量就是存储地址的变量 指针使用 &p : 引用*p : 解引用、间接引用 栈帧 用来给函...

  • linux学习 Day6-bash特性

    bash支持的引号··(反引号):命令替换“”(双引号):弱引用,可以实现变量替换‘’(单引号):强引用,不完成变量替换

  • C++复合类型总结(指针)

    引用是变量的别名,指针就是变量地址的别名。 与引用类似,指针也实现了对其他对象的间接访问。然而指针与引用又有很多不...

  • GoAdvance

    指针 指针就是地址,指针变量就是存储地址的变量 *p : 解引用,间接引用 栈帧:用来给函数运行提供内存空间,取内...

  • Bash脚本之字符串处理

    在Bash脚本方面,我真是一个菜鸟。引用变量的值,要在变量名前加$字符串连接:Bash会自己连接,写在后面就行了。...

  • Shell进阶脚本-内部变量

    内建变量 影响 Bash 脚本行为的变量 $BASH Bash程序的路径 $BASH_ENV 这个环境变量会指向一...

  • bash脚本编程-变量,变量类型

    bash变量类型: 环境变量,本地变量,位置变量,特殊变量。 本地变量: bash: VARNAME=value ...

  • bash脚本内部变量

    bash脚本内部变量 $BASH bash的程序文件的路径,如/bin/bash $BASH_ENV 该环境变量保...

网友评论

    本文标题:bash变量的间接引用

    本文链接:https://www.haomeiwen.com/subject/rwcvlqtx.html