繁体   English   中英

bash使用数组变量创建for循环

[英]bash create for loop with an array variable

我试图让一个命令的输出被 for 循环读取,但是这样循环变量将是一个数组。 那可能吗? 这是我到目前为止一直在尝试的:

function samplevals() {
    echo '"aa bb"'
    echo '"cc dd"'
    echo '"ee ff" "gg hh"'
}

samplevar='"aa bb"
"cc dd"
"ee ff" "gg hh"'

echo call function samplevals:
for x in `samplevals `; do echo ">$x<"; done

echo read variable samplevar:
echo $samplevar
for x in $samplevar; do echo ">$x<"; done

echo process output of 'echo samplevar:'
for x in `echo $samplevar`; do echo ">$x<"; done

echo "the thing with set"
for x in $samplevar; do set -- $x ; echo "\$1=>$1<,\$2=>$2<"; done

但输出总是相同的:

>"aa<
>bb"<
>"cc<
>dd"<
>"ee<
>ff"<
>"gg<
>hh"<

我可以以某种方式阻止 bash 将元素分成更小的部分吗?

bash定义数组的方法是

samplevars=("aa bb" "cc dd" "ee ff" "gg hh")
for x in "${samplevars[@]}"; do
    echo ">$x<"
done

按照chepner 的回答,使用read命令。 命令的-a标志部分允许将输出写出到数组中。

IFS=$'\t' read -ra arrayDef < <(echo -ne '"abc def"\t"ghi jkl"')
for x in "${arrayDef[@]}"; do
    echo ">$x<"
done

您可以用一些生成此类字符串的命令替换echo部分。 请记住适当更新IFS以了解字符串的分隔方式。 就我而言,我只是将字符串分隔为\\t

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM