Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Arrays 猛击。预设变量_Arrays_Bash_Variables - Fatal编程技术网

Arrays 猛击。预设变量

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

最近我了解到在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 c=z p u v w
为了简单起见,我忽略了重定向操作符。这一行基本上用命令
p
启动一个子进程,并将argumenst
u
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中就不可见了,对吧?我不理解这个问题。这篇文章描述了我认为的解决方案。他将数组作为字符串传递(因为数组不是“第一类值”),并将字符串转换为脚本本身的数组。