브래킷 루프

브래킷 루프

제목 주위에 함수로 프레임을 만들려고 하는데 함수를 호출하면 항상 함수를 찾을 수 없습니다.라는 메시지가 나타납니다. 왜 작동하지 않는지 찾을 수 없습니다.

내가 얻는 오류 :

banner.sh: 3: function: not found
+-+
banner.sh: 11: Syntax error: "}" unexpected

코드 세그먼트:

function cover {
    length=${#1}
    echo -n '+'
    for i in {0..$length-3}
    do
        echo -n '-'
    done
    echo '+'
}

마지막으로 다음과 같이 함수를 호출합니다.

cover
echo "previously declared string variable"

답변1

비표준 구문을 사용하고 있으며 표준 셸을 사용하여 스크립트를 실행하고 있습니다.

function fooBash에서 표준으로 지원되는 함수에 대한 ksh 구문입니다 foo().

그러나 표준 셸에서는 두 개의 인수를 사용하여 function foo {명령을 실행합니다. 해당 이름의 명령이 없으므로 오류가 발생합니다. 마지막으로 키워드가 여는 중괄호 그룹 없이 나타나는 경우에도 구문 오류가 발생합니다.functionfoo{}

오류 메시지의 정확한 철자는 /bin/sh데비안과 우분투에서 사용되며 (주로) 표준 POSIX 구문만 지원하는 Dash를 실행 중인 것처럼 보입니다.

POSIX 쉘에서 POSIX 구문을 사용할 수 있고 Bash 구문에서 Bash를 사용할 수 있습니다.

{0..$length-3}(내가 아는 한) 이것은 어떤 쉘에서도 작동하지 않는다는 점에 유의하십시오 . 예를 들어 다음을 참조하십시오.Bash에서는 중괄호 확장에 정수 변수를 사용할 수 있습니까?

for (( .. ))Bash/ksh/zsh에서 사용할 수 있는 일련의 숫자를 반복하려면 다음을 수행하십시오 .

for ((i = 0; i < length - 3; i++)) do
    ...
done

관련 정보