【发布时间】:2022-10-25 11:21:21
【问题描述】:
我有这个非常简单的脚本:
data=$(<data.txt)
counter=10
#just a dbquery using $data
result=(`psql -X -t -AF $'\t' -h $POSTGRES_HOST -d $POSTGRES_DATABASE -U $POSTGRES_USERNAME -w -c "select COUNT(field_value) from table where field_value in ($data)"`)
if [ $result == counter ]; then
echo -e "\e[92m Success \e[39m"
else
while read -r dataLine;
do
result=(`psql -X -t -AF $'\t' -h $POSTGRES_HOST -d $POSTGRES_DATABASE -U $POSTGRES_USERNAME -w -c "select field_value from fields where field_value = $dataLine" `)
if [ -z "$result" ]; then
echo "$dataLine failed"
fi
done < $data
fi
我收到line 17: $data: ambiguous redirect (fi 是)我想问题出在第一行读取 data.txt 然后稍后在 read -r 上引用 $data 但我不完全确定出了什么问题。
有任何想法吗?
编辑:第 17 行错误,而不是第 21 行。
edit2:修复了循环内的“结果”错字。
编辑 3:data.txt 包含 UUID 列表:
'5dce6dcc-5368-4dc2-b26e-01b92c3dd3aa',
'6dab9b13-1734-4766-93f5-a96d0e0afd38',
'c365e709-296b-4e8e-acf9-1d9e252325f6'
【问题讨论】:
-
data.txt包含什么?<后面必须跟一个文件名。 -
if [ result == counter ]应该是if [ $result == $counter ]你错过了$。 -
我怀疑你实际上想要
done < data.txt。 -
你为什么要把
()放在你的psql电话周围?这将结果放在一个数组中,这是你想要的吗? -
在循环内设置变量
results(复数),然后在if语句中使用$result(单数)。
标签: linux bash for-loop while-loop