在Bash中的for循环中仅运行一次命令

伊甸园

我从函数中得到以下bash代码模式:

for folder in ${FOLDER[@]}; do
    if [ $# -ne 0 ]; then
        rsync -rvh --delete-after ${folder} ${folder_dest}
    else
        local zipFile=$(stamp-files file.zip)
        unzip -q ${zipFile} "${folder}"*  -d "${folder_src}"
        rsync -rvh --delete-after ${folder_src}${folder} ${folder_dest}
        rsync -rvh --delete-after ${folder_src}${folder} ${folder_dest2}
    fi
done

因此,在此函数中,我在for循环中有一个if语句。正如您在其他部分看到的那样,有一个对另一个函数的调用stamp-files仅在第一次迭代中就需要对其他函数的调用,即使它不会引起任何问题,也可以通过只调用一次来肯定可以改善它。

您知道如何简单地保持代码形状(for循环中的if语句)吗?

本杰明W.

您可以设置变量并在第一次迭代中更改它:

first='yes'
for folder in "{folders[@]}"; do
    if [[ $first == 'yes' ]]; then
        local files=$(stamp-files "$folder")
        rsync -rvh --delete-after "$files" "$folder_dest"
        first='no'
    else
        rsync -rvh --delete-after "$folder" "$folder_dest"
    fi
done

您尝试使用的$#方式无效:这是位置参数的数量,与迭代次数或类似次数无关。

我还更改了几件事:

  • folders代替FOLDER; 大写变量名称更可能与shell和环境变量冲突
  • 引用所有扩展名以防止单词分裂和乱序([[...]]自动左侧引用)
  • 我用$folder代替${folder},但这实际上只是个人喜好

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

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

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章