假设我有一个名为'Hello'的脚本.就像是:
array[0]="hello world"
array[1]="goodbye world"
echo ${array[*]}
Run Code Online (Sandbox Code Playgroud)
我想在另一个脚本中做这样的事情:
tmp=(`Hello`)
Run Code Online (Sandbox Code Playgroud)
我需要的结果是:
echo ${tmp[0]} #prints "hello world"
echo ${tmp[1]} #prints "goodbye world"
Run Code Online (Sandbox Code Playgroud)
相反,我得到了
echo ${tmp[0]} #prints "hello"
echo ${tmp[1]} #prints "world"
Run Code Online (Sandbox Code Playgroud)
换句话说,每个单词都放在tmp数组中的不同位置.我如何得到我需要的结果?
将其作为NUL分隔的流发送:
printf '%s\0' "${array[@]}"
Run Code Online (Sandbox Code Playgroud)
......而在另一方面,从该流中读取:
array=()
while IFS= read -r -d '' entry; do
array+=( "$entry" )
done
Run Code Online (Sandbox Code Playgroud)
这通常与过程替换一起派上用场; 在下面的示例中,初始代码位于一个命令(无论是函数还是外部进程)中,调用如下generate_an_array:
array=()
while IFS= read -r -d '' entry; do
array+=( "$entry" )
done < <(generate_an_array)
Run Code Online (Sandbox Code Playgroud)
您还可以使用declare -p发出的字符串eval来获取内容:
array=( "hello world" "goodbye world" )
declare -p array
Run Code Online (Sandbox Code Playgroud)
......而另一方面......
eval "$(generate_an_array)"
Run Code Online (Sandbox Code Playgroud)
然而,这不太可取 - 它不像bash那样可以移植到编程语言(而几乎所有语言都可以读取NUL分隔的流),并且它要求接收程序信任发送程序以返回declare -p结果而不是恶意内容.
| 归档时间: |
|
| 查看次数: |
1508 次 |
| 最近记录: |