2016-08-25 2 views
0

私はbash oneライナーを書いています。 この作品(プリントがコンソールに日付やそれを実行しようとします):Bash:エスケープ変数

-bash-4.1$ DATE=`$(date --date="2 days ago" +%F)` echo "${DATE}" 

しかし、この:

`DATE=$(date --date="2 days ago" +%F)` psql -d some_db -c "select row from table where started >= '${DATE}' and started < ('${DATE}'::date + '1 day'::interval);" 

は与える:

ERROR: invalid input syntax for type timestamp: "" 
LINE 1: ... table where started >= '' ... 

${DATE}が空であることを意味しています。 動作させるために変更する必要はありますか?

+1

Wの二つの文にコマンドあなたは '$(...)'と同じコマンドで古いバックティックを混ぜていますか? – anubhava

+0

ええ、少なくとも名前については分かっていますが、最初の例では空の文字列ではありません。 – mnowotka

+1

あなたの最初の行は 'bash:2016-08-23:command not found'エラーを生成します。 'DATE = $(date --date =" 2 days ago "'+%F')&& echo" $ DATE "' – anubhava

答えて

1

最初のコマンドはいくつかの理由で壊れています。まず、dateコマンドの出力を別のコマンドのように実行するように、バッククックと$()を混在させます。それは値が代入されていた前

output=$(command) 

は、第二に、変数は、シェルによって展開されるだろうので、あなたを分割する必要があります。この構文を使用し、変数にコマンドの出力を保存するには

date=$(date_command); psql -c "select ... '$date'" 

...または直接コマンド置換を使用します:

psql -c "select ... '$(date_command)" 
1

なぜbashで日付を計算しますか? PGはそれを直接行うことができます:

SELECT ... WHERE started >= (datefield - interval '2 day') 
             ^^^^^^^^^^^^^^^^^ 
+0

この回答ありがとうございます。問題は、bashでそれをどうやってやるかということでした。これがPGであるという事実を抽象化してください。あなたが日付を使用する必要がある他のコマンドかもしれません。 – mnowotka

関連する問題