gpt4 book ai didi

arrays - 如何从 Bash 中的脚本返回一个数组?

转载 作者:行者123 更新时间:2023-11-29 09:35:24 29 4
gpt4 key购买 nike

假设我有一个名为“Hello”的脚本。像这样的东西:

array[0]="hello world"
array[1]="goodbye world"
echo ${array[*]}

我想在另一个脚本中做这样的事情:

tmp=(`Hello`)

我需要的结果是:

echo ${tmp[0]}  #prints "hello world"
echo ${tmp[1]} #prints "goodbye world"

相反我得到

echo ${tmp[0]}  #prints "hello"
echo ${tmp[1]} #prints "world"

或者换句话说,每个单词都放在 tmp 数组中的不同位置。我如何获得我需要的结果?

最佳答案

将其作为 NUL 分隔的流发出:

printf '%s\0' "${array[@]}"

...并且,在另一侧,从该流中读取:

array=()
while IFS= read -r -d '' entry; do
array+=( "$entry" )
done

这通常与流程替换一起派上用场;在下面的示例中,初始代码位于作为 generate_an_array 调用的命令(无论是函数还是外部进程)中:

array=()
while IFS= read -r -d '' entry; do
array+=( "$entry" )
done < <(generate_an_array)

您还可以使用 declare -p 发出一个字符串,该字符串可以被evaled 以取回内容:

array=( "hello world" "goodbye world" )
declare -p array

...并且,在另一边...

eval "$(generate_an_array)"

然而,这不太可取——它不能移植到 bash 以外的编程语言(而几乎所有语言都可以读取 NUL 分隔的流),并且它需要接收程序信任发送程序以返回 declare -p 结果而不是恶意内容。

关于arrays - 如何从 Bash 中的脚本返回一个数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25291347/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com