2015-01-29 4 views
-1

Windows 명령 프롬프트에서이를 수행하려고합니다.bash 로그인 쉘에 변수 지정

C:\cygwin64\bin\bash --login -c "$var="<hallo>" && 
echo "$var"" 

내가 얻을 오류 :

The system cannot find the file specified. 

하지만이 작품 :

C:\cygwin64\bin\bash --login -c 
    "var="hello" && echo "$hello"" 

그것은 '<'를 얻을 때 문제가 발생할 것으로 보인다로그인 쉘. 쉘 변수에 꺽쇠 괄호가있는 문자열을 어떻게 할당 할 수 있습니까?

+4

따옴표가 꺼져 있고 첫 번째 시도에서 변수 할당에'$'기호가 있습니다. '-c "var = '' ''또는 유사하게 원한다. –

+0

왜 내가 정상적인 bash와는 다른 것들을 언급해야하는지 설명 할 수 있습니까? – sakal

+0

과제에서'$'를 사용하지 않으면 정상적으로 다르지 않습니다. 거기도 인용하고 있지 않습니다. 당신이''var = ""&& echo "$ hello" "라고 말할 때, 외부 문자열에 대한 * 내부 *로 의도 된 따옴표는 쉘에 의해 그렇게 보이지 않습니다. 'var = ""&& echo "$ hello"'(즉, 내부 인용 부호를 남기고있는 외부 인용 부호를 정신적으로 벗겨냅니다). 그 껍질은 그보다 더 벙어리입니다. 따옴표는 왼쪽에서 오른쪽으로 쌍을 이룹니다. 그래서''var = ''는 하나의 따옴표로 묶인 문자열이고''는 따옴표로 묶이지 않고''&& echo "'는 하나의 따옴표 붙은 문자열이고'$ hello'는 따옴표로 묶이지 않고'" "'는 빈 따옴표 붙은 문자열입니다. –

답변

1

당신은 당신이 -c 해당 인수에서 외부 따옴표를 제거하고

같은
$var="<hallo>" && echo "$var" 

하지만 그건 보이는 문자열로 결국 쉘을 기대하고

C:\cygwin64\bin\bash --login -c "$var="<hallo>" && echo "$var"" 

쓸 때 쉘이하는 것이 아닙니다.

셸은 계속 진행되는 따옴표와 일치합니다. 그래서 껍질이 보입니다.

["$var="][<hallo>][" && echo "][$var][""]. 

이 구문 분석 문제를 피하려면 현재 셸에서 안쪽 따옴표를 이스케이프 처리하거나 다른 따옴표를 사용해야합니다.

C:\cygwin64\bin\bash --login -c 'var="<hallo>" && echo "$var"' 

참고도 나는 할당에 변수 이름의 시작에서 $을 제거하는 것이 현재 쉘이 $var를 확장하지 않았다, 그래서 나는 외부에 작은 따옴표를 사용하는 것이다.

바깥쪽에 큰 따옴표를 사용하면 이와 같이 사용할 필요가 있습니다. 비슷한 쉘 구문 분석의 논의와 방법 역 따옴표와 가지 둥지 (또는하지가) 당신이 내 대답 here을 볼 수 있습니다 들어

C:\cygwin64\bin\bash --login -c "var='<hallo>' && echo \"\$var\"" 

.