2017-12-13 3 views
-1

일부 파일을 정렬하는 스크립트를 작성하려고하는데 쉘 (데비안, 대시 인 것처럼 보임)에서 수동으로 작업을 수행했지만 스크립트와 동일한 코드를 실행할 때 라인 2와 3에서 "잘못된 대체"를 얻습니다. I가 발견변수에서 잘못된 대체 오류

#!/bin/bash 
LAST_MONTH="${date +'%Y%m' -d 'last month'}" 
LAST_MONTH_HYPHEN="${date +'%Y-%m' -d 'last month'}" 

모든 SO 다른 쉘과 관련이있을 듯, 그래서 나는 #!/bin/bash뿐만 아니라 #!/bin/sh을 시도했습니다. 또한 ./filesorter.sh, bash filesorter.shsh filesorter.sh으로 스크립트를 실행 해봤 모든 순열은 나에게 괄호는 괄호 위해 같은 "나쁜 교체"테마

filesorter.sh: line 2: ${date +'%Y%m' -d 'last month'}: bad substitution 
filesorter.sh: line 3: ${date +'%Y-%m' -d 'last month'}: bad substitution 

답변

2

변화에 약간의 변화를 제공합니다.

LAST_MONTH="$(date +'%Y%m' -d 'last month')" 
LAST_MONTH_HYPHEN="$(date +'%Y-%m' -d 'last month')" 

중괄호, ${var} 같이 가변 교체 $var 동등하다. 괄호는 $(command arg1 arg2)에서와 같이 명령 대체를위한 것입니다.

Shellcheck은 쉘 스크립트의 구문을 검사하기위한 훌륭한 도구입니다. 스크립트를 공급하는 경우는 말한다 :

SC2154을 : date는 참조 만 ("$(date ...)"를 사용하여 명령에서 출력) 할당되지 않습니다.