我从函数中得到以下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语句)吗?
您可以设置变量并在第一次迭代中更改它:
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] 删除。
我来说两句