Arrays 猛击。预设变量
最近我了解到在bash中有可能预先设置变量。例如:Arrays 猛击。预设变量,arrays,bash,variables,Arrays,Bash,Variables,最近我了解到在bash中有可能预先设置变量。例如: q=2 ./ecq 我得到了2输出 #!/bin/bash # This file is ./ecq echo "$q" 但使用数组时,我得到了一个错误: mn=( 1 2 3 ) ./pre 使用/pre: #!/bin/bash echo "${mn[0]}" 我得到了(1233)。 如何获取mn预设数组?没有预设变量的概念,不管它是什么 作为子进程调用外部命令的基本语法如下 a=x b=y
q=2 ./ecq
我得到了2
输出
#!/bin/bash
# This file is ./ecq
echo "$q"
但使用数组时,我得到了一个错误:
mn=( 1 2 3 ) ./pre
使用/pre
:
#!/bin/bash
echo "${mn[0]}"
我得到了(1233)
。
如何获取mn
预设数组?没有预设变量的概念,不管它是什么
作为子进程调用外部命令的基本语法如下
a=x b=y c=z p u v w
为了简单起见,我忽略了重定向操作符。这一行基本上用命令p
启动一个子进程,并将argumenstu
、v
和w
传递给它。每个新流程都需要一个环境,它基本上是从名称(所谓的环境变量)到一些字符串的映射。进程p
的环境是调用进程(即shell脚本)的环境副本,但通过将环境变量a
设置为x
,将变量b
设置为y
和c
设置为z
来增强
现在,您需要设置一个以数组为值的环境变量。这是行不通的。环境变量的值必须是字符串,因为调用子进程是一个通用概念(不受bash之类的特定编程语言的约束),并且每种编程语言都有一些方法来处理字符串,并且应该提供一个库函数来访问环境(例如,在进行C编程时使用函数
getenv
)。我们甚至不知道用于实现进程的编程语言p
是否有数组。想象一下,p是作为POSIX shell脚本编写的-当您使用POSIX shell时,您没有像在bash或zsh中那样的数组。像这样mn=(1 2 3)/pre
@Ivan:这样,mn
在pre
@user1934428中就不可见了,对吧?我不理解这个问题。这篇文章描述了我认为的解决方案。他将数组作为字符串传递(因为数组不是“第一类值”),并将字符串转换为脚本本身的数组。