2016-08-25 3 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);" 

이 부여를 : ${DATE}가 비어 있음을 의미

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

. 작동하도록 수정하려면 어떻게해야합니까?

+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