首页 > 解决方案 > 将包含字符串的变量添加到数组不起作用

问题描述

作为 bash 和 unix 的新手,我再次为一个非常基本的问题苦苦挣扎,即将字符串添加到数组中。我想要实现的是让一个文件名数组与某个模式匹配。这是我的脚本:

declare -a TASKS=()
find /cs/srpresul/app/deploy/config/imas-config/rdx-tasks-prepared/ -name 
"IMAS-Loaders-*.json"|while read fname; do
   FILE_NAME=$(echo $fname | cut -d'/' -f11)
   echo "$FILE_NAME"
   TASKS+=("$FILE_NAME")
done
TASKS+=('foo' 'bar')
for TASK in "${TASKS[@]}"
do
   echo "$TASK"
   echo "Starting back population for type $TASK between $1 and $2"
done

所以结果如下: FILE_NAME 变量保持正确的值,因为它打印正确,但 TASKS 数组不包含它们。数组中仅存在 'foo' 和 'bar' 值。任何想法我做错了什么?

标签: arraysbashunix

解决方案


您正在使用管道,因此您要附加到TASKS子外壳中,这就是它不起作用的原因。您可以使用以下内容:

declare -a TASKS=()
for fname in $(find /cs/srpresul/app/deploy/config/imas-config/rdx-tasks-prepared/ -name 
"IMAS-Loaders-*.json"); do
   FILE_NAME=$(echo $fname | cut -d'/' -f11)
   echo "$FILE_NAME"
   TASKS+=("$FILE_NAME")
done
TASKS+=('foo' 'bar')
for TASK in "${TASKS[@]}"
do
   echo "$TASK"
   echo "Starting back population for type $TASK between $1 and $2"
done

推荐阅读