~ / .bashrc에 한 줄로 함수 쓰기


40

한 줄로 함수를 .bashrc파일 에 쓰려고 할 때 왜

list(){ ls -a }

오류가 발생합니까?

bash: /home/kasiya/.bashrc: line num: syntax error: unexpected end of file

하지만 여러 줄로 쓸 때 괜찮습니까?

list(){
    ls -a
}

나중에 스택 오버플로 에 해당하는 질문이 있습니다 .
sampablokuper

답변:


33

의 함수 bash는 기본적으로 복합 명령 (또는 코드 블록)이라고합니다. 보낸 사람 man bash:

Compound Commands
   A compound command is one of the following:
   ...
   { list; }
          list  is simply executed in the current shell environment.  list
          must be terminated with a newline or semicolon.  This  is  known
          as  a  group  command. 

...
Shell Function Definitions
   A shell function is an object that is called like a simple command  and
   executes  a  compound  command with a new set of positional parameters.
   ... [C]ommand is usually a list of commands between { and },  but
   may  be  any command listed under Compound Commands above.

이유가 없습니다. 구문 일뿐입니다.

주어진 단선 함수의 목록이 개행 또는로 끝나지 않기 ;때문에 bash불평합니다.


42

;함수의 끝에는 다음이 필요합니다.

list(){ ls -a ; }

작동해야합니다.

bash에 대한 함수 정의 구문은 다음과 같이 지정됩니다.

name () { list ; }

에 포함 ;되지 않은가 포함되어 list있습니다.

가 있음을 ;이 자리에 필요 이상 구문의 종류이다. bash구체적 이지 않고 , 동일 ksh하지만의 ;에 필요하지 않습니다 zsh.


18

단일 명령 ( ";")의 끝은 줄 바꿈으로 암시됩니다. oneline 버전 }은 종료되지 않은 ls -a명령에 대한 인수로 구문 분석됩니다 . 당신이 볼 수있는 것 :

$ foo(){ echo "a" }
}
$ foo
a }

함수 선언 내부의 명령이 후행 중괄호를 삼키는 방법을 참조하십시오.


2
좋은 설명! 따라서 이것은 구문 이상 이 아닙니다 . 실제로 몇 가지 논리가 있습니다.
Don Hatch
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.