首页 > 解决方案 > shell 在 for 或 while 循环中读取并传递多个变量

问题描述

下面是我的输入文件和我正在使用的代码 FILE :

cat $TESTFILE
2020-01-13,COST_CH_RPT
2018-04-19,LOSS_CH_RPT

代码 :

for i in `cat $TESTFILE`
do
   export date=`cat $TESTFILE|cut -d',' -f1`
      echo date=$date
   export Name=`cat $TESTFILE|cut -d',' -f2`
      echo Name=$Name
beeline --outputformat=csv2 --hivevar Name=$Name --hivevar date=$date  -u ${beeURL} -f TEST.hql
done

目标是为文件中的每一行运行 hql 文件,上面的代码对可用的两行运行了两次,但是为两次运行传递的变量是相同的,即文件中的第一行。 . 我如何区分每次运行的输入变量。

标签: bashshellsshhivesh

解决方案


正如评论所指出的,当前的解决方案错误地多次重新处理 TESTFILE。更简单的替代方法是使用“读取”循环遍历这些行:

while IFS=, read date Name ; do
    echo beeline --outputformat=csv2 --hivevar Name="$Name" --hivevar date="$date"  -u "${beeURL}" -f TEST.hql
done < $TESTFILE

它只是遍历 TESTFILE 中的行,然后执行 beeline 命令。建议使用引号来防止输入文件中的错误 - 特别是空格,这将“破坏”命令行。


推荐阅读