2017-04-10 1 views
1

나는 bash는 스크립트에 case 문에서 변수를 초기화하기 위해 노력하고,bash는 스크립트의 경우 스위치

function cpfiles(){ 
case $1 in 
     a) echo "a" ; source = ${HOME}/dev/a.zip ; dest = 'PROGRA~2\\a.zip';; 
     b) echo "b" ; source = ${HOME}/dev/b.zip ; dest = PROGRA~2\\b.zip;; 
     *) echo "INVALID MODULE !" ;; 
esac 

echo ${source} ${dest} 
} 

그러나 나는이 오류가 무엇입니까 :

[#] cpfiles a 
a 
bash: =: No such file or directory 
bash: dest: command not found... 

내가 놓치고 무엇을?

+0

, 나는 B에 따옴표를 확인할 것) 후 dest = – Michal

답변

2

스크립트이 포함

a) echo "a" ; source = ${HOME}/dev/a.zip ; dest = 'PROGRA~2\\a.zip';; 
b) echo "b" ; source = ${HOME}/dev/b.zip ; dest = PROGRA~2\\b.zip;; 

문제 :

  • source 당신은 이전과 = 기호 다음에 여분의 공간을 추가
  • 내장 쉘입니다. 읽는 것이 더 쉬울 수도 있지만 유효한 쉘 구문은 아닙니다.

그래서 대신 source라는 변수에 값을 할당, 당신은 실제로 인수로 그것을 =를 전달 source 내장을 요구하고있다.

대신이 시도 :

a) echo "a" ; source=$HOME/dev/a.zip ; dest='PROGRA~2\a.zip';; 
b) echo "b" ; source=$HOME/dev/b.zip ; dest='PROGRA~2\b.zip';; 

변수 이름의 끝 (/ 변수 이름에 유효하지 않은 모호함이 없기 때문에 HOME 주위에 괄호가 완벽하게 유효하지만, 필요하지 않은 점에 유의하시기 바랍니다, 그래서 셸은 파싱하는 동안 멈 춥니 다.) 큰 따옴표는 할당에서 대부분의 사람들이 사용하지만 할당 된 문자열에 공백이 포함되지 않은 경우 (확장 된 값이더라도) 필요하지 않습니다.

마지막 문제 한 번 ... dest에 할당 된 값을 단일 인용 부호로 묶고 백 슬래시를 이스케이프하고 있습니다. 이렇게하면 두 개의 백 슬래시가 포함 된 값이 생성됩니다. 따옴표 또는 백 슬래시 중 하나를 제거하십시오.

+0

고마워요, 내가 모든 공간을 제거하면, 매우 도움이 근무 – Breakidi

1

에 대한 지정이 없음= 주위에 공백을 넣습니다. 일부 명령에 단일 =을 인수로 사용하는 것이 완전히 유효합니다.

source: source filename [arguments] 
    Execute commands from a file in the current shell. 

dest: command not found 후반이 명령 dest을 실행으로 간주되기 때문에 : 명명 된 파일을 열려고 쉘 명령입니다 =: No such file or directorysource 때문에

당신은 얻을.

1

공백은 배시에서 중요하며 인수를 분리하는 데 사용됩니다. source 같은 변수

source=${HOME}/dev/a.zip 

오류를 일으키는 스크립트에서 중요한

source = ... 
0

두 가지를 존재하지 않는 다음 명령은 파일 =을 열려고하는 명령입니다 설정 :

1. 소스 :이 변수는 셸 변수이며 현재 셸 스크립트 나 명령 프롬프트에 함수 파일을로드하는 데 사용할 수 있습니다. 주어진 FILENAME에서 명령을 읽고 실행하고 반환합니다.

2. 할당 연산자 및 두 문자열을 비교하기 위해 사용되는 = B를 또는 $의 STR1 == $의 STR2 [같은 조건 기술]에서 확인할 수있는 바와 같이 처리 공간없이 "=" 유닉스 A = B. 문자열 평등 검사를위한 대체 방법입니다.

또한 $ HOME은 $ {HOME} 대신 변수의 값을 가져 오기에 충분하지만 사용중인 경우 오류가 발생하지 않습니다. 아래 내용을 참조하십시오.

* $ 에코 $ {SHELL}

/빈/bash는

$ 에코 $ SHELL

/빈/bash는 * 답변의 제외