2014-07-07 4 views
8
pathname=$(cat $HOME/.rm.cfg) 
if [ ! -z $pathname/$1 ] 

.rm.cfg을있는 경우 체크 예상 오류는 이름 다음 디렉토리이항 연산자 전체 경로 이름을 가진 파일이

/홈/사용자 이름/deleted1

$1를 포함하는 파일입니다 예 : 파일 유리

[ ! -z $pathname/$1 ] 줄이 왜 이진 연산자 예상 오류를 발생시키는 지?

답변

15

$ 경로 이름에 두 개 이상의 단어가 포함 된 것 같습니다. .rm.cfg 파일에 여러 줄이 있거나 경로에 공백이있을 수 있습니다. 어쨌든

if [ ! -z word word word/$1 ] 

으로 끝납니다. 당신은 단지 하나의 경로를 기대하고 경로 포함 공백을 방지하고자하는 경우,

if [ ! -z "$pathname/$1" ] 
+0

, 문제는 내가 $ 경로 이름의 나의 정의에 후행 공백이 있었다이었다. 이 문제를 방지하기 위해 strip 함수를 사용했습니다. ([here] (https://www.gnu.org/software/make/manual/html_node/Text-Functions.html) 참조). – rkersh

+0

답변을 수락하십시오! –

8

에 경우 줄을 변경 내가 이항 연산자가 I가 두 개 이상의 단어를 얻고있다 예상 동일한 오류에 직면했다 일부 변수. 나는 그것을 아래 언급처럼 사용했을 때.

if [ ! -z ${variable} ]; 

그래서 해결이 오류 나는 그것을 변경 : 나를 위해

if [[ ! -z ${variable} ]]; 
+0

위대한! 나를 위해 일했다. 그러나 그 솔루션이 왜 작동하는지 어떤 생각입니까? –

관련 문제