在各种循环中追加到同一数组,仅保留最后一个值Bash 4

格雷格·莱文塔尔(Gregg Leventhal)

我有这样的事情:

FILES=()
for i in *.map
do
    FILES+=($i)
done

find /var/candy -name "chocolate_[0-9]" | while read snack
do
    FILES+=($snack)
done

for file in ../out/amsterdam/apples/{system.map,vmlinux}
do
    FILES+=($file)
done

但是数组最终只包含../out/amsterdam/apples/system.map../out/amsterdam/apples/vmlinux其他值发生了什么?我知道它们存在于那些循环中,因为我回声以确保变量包含某些东西。

特蕾莎修女和少年

摘自Bash常见问题解答

我在管道中的循环中设置变量。为什么它们在循环终止后消失了?

如上所述,这种可能令人惊讶的行为的原因是,每个SubShell都引入了新的变量上下文和环境。上面的while循环在一个新的子Shell中执行,它具有自己的变量linecount副本,该副本由从父Shell取得的初始值“ 0”创建。然后将此副本用于计数。while循环完成时,子shell副本将被丢弃,并且回显命令中将使用父级的原始变量linecount(其值未更改)。

为了避免在第二个循环中创建子外壳,可以通过管道以外的其他方式向其提供数据:

while read snack; do
    FILES+=($snack)
done < <(find /var/candy -name "chocolate_[0-9]")

while read snack; do
    FILES+=($snack)
done <<<"$(find /var/candy -name "chocolate_[0-9]")"

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

Mysql的storded程序插入queary一个循环中仅将最后一个值

在熊猫中,如何用不超过4行的最后一个非零值替换所有零值,而没有for循环?

如何仅使用一个循环和一个内部循环打印给定的图案?而不是使用4个循环

TypeScript。FormGroup FormArray-按值仅删除一个元素对象。角2 4

for循环中的lambda仅取最后一个值

对象值被循环中的最后一个值覆盖

通过for循环增强数组仅保留最后一个对象?

coreData仅打印最后一个实体(swift4)

如何在Swift4中仅获取结构数组中每个唯一名称的最后一个值?

如果语句仅保留最后一个值,则嵌套在循环内部

完成FOR之后,最后一个FOR循环中的值

仅显示while循环中来自JavaScript的最后一个值

我有一个循环,想用ajax将类添加到最后4个元素中

将类“ last”添加到while循环中数组的最后一个元素

循环中异步函数的最后一个值

JavaScript:在for循环中保留一个值

在for循环中构造时仅返回数组的最后一个值

Laravel 4 foreach循环中的第一个奇怪结果

从循环中的数组值中删除最后一个逗号

向量值被循环中的最后一个值覆盖

复制要添加到同一数组的最后一个数组对象

查找第一个非重复字符算法 Swift 4(仅循环一次字符串)

在 Angular 4 循环中为一个元素设置动画

在循环中一次执行一个异步方法,Swift 4

Pandas 数据框只保留 for 循环中的最后一个值

HttpSession 属性:getAttribute() 仅传递/获取循环中的最后一个值

如何在 Mule 4 的对象数组中选择最后一个重复对象

在 forEach 循环中,仅显示最后一个值

使用数组删除for循环中的最后一个逗号