我正在尝试循环遍历表名并将表模式导出为.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")
在您的情况下,不需要$((命令替换。