BASH阵列副本

我是BASH新手。BASH阵列副本

我有字符串名称数组,但我需要一套数组作为数组,而这个数组作为数组必须包括阵列由\n(新线)分割的字符串,字符串的部分

这是我有:

ARRAY=$'one\ntwo'; 

x=$ARRAY;

IFS=$'\n' read -rd '' -a y <<<"$x";

y=(${x//$'\n'/});

IFS=$'\n' y=(${x//$'\n'/ });

IFS=$'\n' y=($x);

unset ARRAY; (i try unset ARRAY)

ARRAY=$y; (this not works correctrly)

echo ${ARRAY[1]}; //result ARRAY[0]="one",ARRAY[1]=""

但如果我尝试echo ${y[1]}; //一切都是正确的Y [0] = “一个” Y [1] = “两节”

我的问题是,我不能设置数组作为y阵列的复制..

回答:

ARRAY=$'one one one\ntwo' 

OLD_IFS="$IFS"

IFS=$'\n' ARRAY=($ARRAY)

IFS="$OLD_IFS"

declare -p ARRAY

输出:

declare -a ARRAY='([0]="one one one" [1]="two")'

回答:

你在新行分割字符串的方法是正确的

array=$'one\ntwo' 

IFS=$'\n' read -rd '' -a y <<<"$array"

现在,你为什么给一个不同的名称,如果最终你想要变量array包含数组?只是这样做:

IFS=$'\n' read -rd '' -a array <<<"$array" 

如果array在这里出现两次都没有问题。现在


,如果你想副本一个数组,你会做到这一点(假设数组复制被称为y在你的例子):

array=("${y[@]}") 

注意,这不会保留数组的稀疏性(但在你的情况下,y不稀疏,所以这没有问题)。


另一评论:当你做IFS=$'\n' read -rd '' -a y <<<"$array"read将与1返回代码返回;虽然这不是一个问题,你可能仍然希望通过使return开心:

IFS=$'\n' read -rd '' -a array < <(printf '%s\0' "$array") 


最后一个评论:而不是使用read你可以使用内置mapfile(仅bash≥4.0):

mapfile -t array <<< "$array" 

以上是 BASH阵列副本 的全部内容, 来源链接: utcz.com/qa/262337.html

回到顶部