0

私はこのスクリプトを持っています:

    echo -e ">> Please, insert edition folder name: ";
    read editionfolder;
    RSeditionfolder="$editionfolder";    
    sh -c $POSTGRESbin'psql -U '$POSTGRESuser' -h localhost -d '$POSTGRESdb' -c "select count(*) from d3_folders where folder_name = '\'$RSeditionfolder\'';"' > $queryFolder$tmpFile

たとえば、editionfolder var: CD_199 FOTOS に挿入すると、次のエラーが表示されます。

FOTOS';": -c: line 0: unexpected EOF while looking for matching `"'
FOTOS';": -c: line 1: syntax error: unexpected end of file

$queryFolder には "query/" 値があり、$tmpFile には "tmpfile" があります

しかし、私は何が間違っているのかわかりません。

このクエリの結果は次のとおりです。

 count 
-------
     0
(1 row)

この場合、数字の 0 だけが必要です。結果をファイルに入れようとしています。次のステップは、このファイルで sed を使用することです。別の方法で知っていることを知っていただければ幸いです。

ありがとう !!

4

2 に答える 2

0

からのこれらの一重引用符をすべてsh -c ...省略し、コマンド全体を二重引用符で引用します。

sh -c "$POSTGRESbin/psql -U $POSTGRESus -h ..."

二重引用符は、引数が1つだけであることを保証し、同時にシェル変数の置換を可能にします。

于 2012-10-26T10:10:07.170 に答える
0

指定されたコマンドは少し面倒です。次のように記述します

sh -c "${POSTGRESbin}psql -U $POSTGRESuser -h localhost -d $POSTGRESdb -c \"select count(*) from d3_folders where folder_name = '$RSeditionfolder';\"" > ${queryFolder}${tmpFile}

まず、二重引用符内に $ 変数を使用して、単一引用符をすべて取り除きます。第二に、明示的な変数名の境界線を使用して、句「$queryFolder$tmpFile」を明確にすることをお勧めします${queryFolder}${tmpFile}。しかし、一般的にスクリプトは問題ありません。

于 2012-10-26T10:19:40.387 に答える