arrays - 将包含字符串的变量添加到数组不起作用
问题描述
作为 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' 值。任何想法我做错了什么?
解决方案
您正在使用管道,因此您要附加到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