2014-09-17 4 views
1

저는 새로운 셸 스크립팅이며 내 코드에 대해 빠른 질문을합니다. 이 작동 :배시/셸 스크립트 : 표현식에서 구문 오류가 발생했습니다.

x=2 
y=4 
z=6 
x=$(($x-1)) 
y=$(($y-2)) 
z=$(($z-3)) 
echo $x $y $z 

$ script.sh 
1 2 3 

그리고이 작품 :

n=2,4,6 
IFS=$',' read x y z <<< $n 
echo $x $y $z 

$ script.sh 
2 4 6 

그러나 이것은 구문 오류가 발생합니다

n=2,4,6 
IFS=$',' read x y z <<< $n 
x=$(($x-1)) 
y=$(($y-2)) 
z=$(($z-3)) 
echo $x $y $z 

$ script.sh 
syntax error in expression (error token is "4 6-1 ") 
2 4 6 -2 -3 

누군가 설명해주십시오이 작동하지 않을 수 왜, 무엇을 구문 오류 란? 감사!

+0

코드가 제대로 작동했습니다. bash의 디버깅 옵션을 사용하여 많은 것을 알 수 있습니다 (파일의 시작 부분에'set -x '를 추가하십시오). – xificurC

답변

1

read 명령에서 따옴표를 사용하지 않는 것이 문제입니다.

는로 사용

IFS=$',' read x y z <<< "$n" 

이 같은 따옴표없이 사용하는 경우 IFS=$',' read x y z <<< $nx이 값을 가져옵니다 만 변수 : 2 4 6하지만 yz는 따라서 문장의 다음 세트 빈 남아 오류가 발생합니다.

+1

이것은 실제로'IFS'가 단지'here' 문자열이 아닌'read'에 적용되어야하기 때문에 4.3에서 수정 된 버그입니다. – chepner

+0

빠른 답변 주셔서 감사합니다! $ n을 Qouting하면 세 번째 코드 블록이 작동합니다. 그러나 $ n은 두 번째 코드 블록에서 인용되지 않고 $ x $ y와 $ z는 값을 얻습니다. 왜 이런거야? – bggarchow

+0

echo를'echo'[$ x] [$ y] [$ z]''로 사용하면'$ n'이 인용되지 않은 후에 어떤 변수가 채워지는지 알 수 있습니다. – anubhava

관련 문제