【问题标题】:Adding variable containing string to array does not work将包含字符串的变量添加到数组不起作用
【发布时间】:2019-12-31 09:56:01
【问题描述】:

作为 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' 值。任何想法我做错了什么?

【问题讨论】:

    标签: arrays bash unix


    【解决方案1】:

    您正在使用管道,因此您在子shell 中附加到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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-09-23
      • 2015-09-05
      • 2014-10-30
      • 1970-01-01
      • 2017-10-05
      • 2011-07-20
      相关资源
      最近更新 更多