![通过迭代执行命令的 Shell 脚本](https://linux22.com/image/25213/%E9%80%9A%E8%BF%87%E8%BF%AD%E4%BB%A3%E6%89%A7%E8%A1%8C%E5%91%BD%E4%BB%A4%E7%9A%84%20Shell%20%E8%84%9A%E6%9C%AC.png)
这是一个在文件夹中查找.tab
文件的脚本,应该使用 导入它们
ogr2ogr
,但我因正确的支撑而失败。
for i in $( ls *.tab )
do
echo item: $i
ogr2ogr -f PostgreSQL -s_srs EPSG:21781 -t_srs EPSG:4326 -overwrite \
-nln $TBL_NAME PG:'"host=localhost user='$DBUSER' dbname='$DBNAME'"' $i
done
我需要一个命令行来ogr2ogr
以这种方式执行该部分:
ogr2ogr -f "PostgreSQL" -s_srs "EPSG:21781" -t_srs "EPSG:4326" -overwrite \
-nln "geom_tour" PG:"host=localhost user=postgres dbname=gis" DMC_34093.tab
答案1
应该:
for i in *.tab
do
echo item: $i
ogr2ogr -f "PostgreSQL" -s_srs "EPSG:21781" -t_srs "EPSG:4326" -overwrite -nln "$TBL_NAME" PG:"host=localhost user=\'${DBUSER}\' dbname=\'${DBNAME}\'" "$i"
done
您需要使用双引号来让 shell 像${DBUSER}
内部一样扩展变量。
注意for i in *.tab
而不是.不解析输出for i in $(ls *.tab)
ls
,它所做的只是用空格和其他特殊字符来破坏文件名。