循环使用配置单元中的表名称



我正在尝试循环遍历表名并将表模式导出为.csv文件。这是我的shell脚本:

#!/bin/bash
## declare an array variable
declare -a array=("table1"
"table2")
# get length of an array
arraylength=${#array[@]}
# use for loop to read all values and indexes
for (( i=0; i<${arraylength}; i++ ));
do
echo "index: $i, value: ${array[$i]}"
hive -e $('DESCRIBE FORMATTED ${array[$i]') | sed 's/[t]/,/g' > /tmp/${array[$i]}.csv
done

但我得到了这个错误:

test.sh: line 14: DESCRIBE FORMATTED ${array[$i]: command not found
Missing argument for option: e

有什么建议吗?

问题就在这里:

hive -e $('DESCRIBE FORMATTED ${array[$i]') | sed 's/[t]/,/g' > /tmp/${array[$i]}.csv

命令替换$()执行shell命令,但DESCRIBE不是shell命令。大括号}也缺少

固定:

hive -e "DESCRIBE FORMATTED ${array[$i]};" | sed 's/[t]/,/g' > /tmp/${array[$i]}.csv

参见类似命令的示例:https://stackoverflow.com/a/52541046/2700344

如果您想将命令结果放入变量中,您可能需要使用$(command(,例如:

count=$(hive -e "select count(*) from mytable")

在您的情况下,不需要$((命令替换。

相关内容

  • 没有找到相关文章

最新更新