Bash 함수 정의의 예기치 않은 토큰 근처에 구문 오류가 있습니다.

Bash 함수 정의의 예기치 않은 토큰 근처에 구문 오류가 있습니다.

죄송합니다. 저는 bash 파일 등에 대해 처음 접했습니다. 내 .bashrc의 복사본은 다음과 같습니다.

alias k='kate 2>/dev/null 1>&2 & disown'

function kk {kate 2>/dev/null 1>&2 & disown}

첫 번째 줄의 별칭은 제대로 작동하지만 두 번째 줄에서는 다음과 같은 오류가 발생합니다.

bash: /home/mozershmozer/.bashrc: line 3: syntax error near unexpected token `{kate'
bash: /home/mozershmozer/.bashrc: line 3: `function kk {kate 2>/dev/null >1>&2 & disown}'

저는 Linux Mint 17.3을 실행하고 있으며 이것이 내 .bashrc 파일에 있는 유일한 두 줄입니다. 내 컴퓨터의 다른 거의 모든 항목은 기본적으로 바닐라입니다. 결국 나는 이 함수를 시험해보고 특정 작업을 수행하게 하고 싶었지만 즉시 구문 벽에 부딪혔습니다. 여기에 나열된 정확한 함수는 구문을 더 명확하게 배울 수 있도록 하는 실험적인 더미 함수일 뿐입니다.

답변1

완전히 특별하지는 않지만 다른 bashPOSIX 쉘 에서도 사용 가능{}상징비록 그들은 특별하지만성격이 맥락에서. 기능 정의에서 복합 명령을 생성할 때 이를 보존하는 것이 중요합니다.성격즉, 공백으로 둘러싸여 있습니다.

이와 같은 단일 행 함수 정의의 마지막 명령은 세미콜론으로 끝나야 합니다. 그렇지 않으면 닫는 중괄호가 }명령에 대한 인수로 처리됩니다.


서술자로서,만약에함수를 다른 POSIX 셸로 이식하려면 다른 함수 구문을 사용하는 것이 좋습니다.

kk () { kate 2>/dev/null 1>&2 & disown; }

의 사용은 function에만 적용되는 bash반면 여기에 제공된 형식은 bashsh, Korn 및 Almquist 쉘과 같은 다른 쉘에 적용됩니다.

disown또한 bash에 따라 다릅니다.

답변2

여러 줄에 입력하면 추가 입력을 피할 수 있으며 ;, 명령이 많이 포함되어 있어도 함수를 작성할 수 있는 방법을 제공합니다.

function kk {
    kate 2>/dev/null 1>&2 & disown
}

관련 정보