Bash 在执行时解析循环变量
我有以下循环:Bash 在执行时解析循环变量,bash,for-loop,case,nested-loops,Bash,For Loop,Case,Nested Loops,我有以下循环: for a in var1 var2; do direst=$theDir/$a cd $direst case $a in var1) theUsrs=$VAR1usrs csvFile="$theDate"__"$b"_.csv sleep 5s ;; var2) theUsrs=$VAR2usrs
for a in var1 var2;
do
direst=$theDir/$a
cd $direst
case $a in
var1)
theUsrs=$VAR1usrs
csvFile="$theDate"__"$b"_.csv
sleep 5s
;;
var2)
theUsrs=$VAR2usrs
csvFile="$theDate"_$(echo $b |awk -F, '{print $1}')__$(echo $b |awk -F, '{print $2}')_.csv
sleep 5s
;;
esac
for b in $theUsrs;
do
echo " "
echo $b $a $direst $csvFile
sleep 2s
cd $direst
if [[ ! -f $csvFile ]];
then
missingUsr=$b
echo "$csvFile is missing, creating empty file"
createMissing"$a"File
fi
cd $direst
gzip -v $csvFile
echo "Uploading $csvFile to New Edge"
uploadFile
done
done
exit
(uploadFile和createMissing“$a”文件是我以前创建的函数)
现在,正如我在这里看到的,我需要为每个变量创建两个不同的循环,这仅仅是因为在循环开始之前无法解析$b
(这是我脚本中的第二个循环变量),所以我需要分别为每个变量确定$csvFile
我也不能将case语句嵌套在第二个循环中,因为还没有确定$theUsers
是否有一种方法可以使
$csvFile
中的$b
仅在第二个循环开始时进行解析(就像批处理中的EnableDelayedExpantion一样)?理解脚本时缺少一些东西。提供dir、$VAR1usrs、$VAR2usrs的示例值。看起来这里有一个逻辑循环。在$a的代码中需要$b,但是$b依赖于$a循环中的代码。。。?如果您解释您试图做什么,我们可能会找到一种摆脱这种逻辑的方法。或者在一个函数中拆分$b循环,并在$a的case语句中的theUsrs=$VAR1usrs
行之后调用它,将所需的值作为参数传递给它。实际上,$VAR1和$VAR2 usrs的值并不重要(只是两个不同服务的用户列表,我需要为每个用户上传一个csv文件并创建缺少的文件),以及$theDir的值,这正是我用来存储这些文件的目录(每个VAR都有一个自己文件的目录)。我唯一需要知道的是,我是否可以在运行第二个循环之前确定$csvFile的不完整值,该值包含$b(第二个循环变量)的值,并仅在调用$csvFile时对其进行解析。