함수 호출 시 구문 오류

함수 호출 시 구문 오류

그래서 스크립트를 실행할 때 각 매개변수에 대해 새 변수를 생성하는 함수를 스크립트에서 생성해 보았습니다. 이것은 내 코드입니다.

#!/bin/bash

# Creating function log
#ARG1=${1}

log() {
  echo "You called DA LOG FUNCTION!!!1!!11one111!"
}

log

#echo "${1}"
#echo "$ARG1"

fcta() {
  for ((x=0;x<1000;++x)); do
   "a$x"=${1}
   if [[ ${#} -gt 1 ]]; then
     shift
   else
     x=1001
   fi
  echo "${a$x}"
#  echo "${1}"
}

fcta $@

알겠어요:

vagrant@localhost vagrant]$./luser-demo10.sh 12 12 12
You called DA LOG FUNCTION!!!1!!11one111!
./luser-demo10.sh: line 25: syntax error near unexpected token `}'
./luser-demo10.sh: line 25: `}'
[04:11----------------------------------------
vagrant@localhost vagrant]$

25번째 줄이에요

#  echo "${1}"
} <----- LINE 25

fcta $@

편집: 누락된 "완료"에 대해 알려주셔서 감사합니다. 사람들은 나에게 무엇을 하고 싶은지 물었고 나는 다른 사람에게 물었습니다.질문이제 이 질문에 대한 답변을 얻었습니다(질문은 왜 구문 오류가 발생하는가입니다). 다시 한 번 감사드립니다.

답변1

귀하의 함수에는 명령 목록을 닫는 do일치 항목이 없습니다 .done

노력하다주택 검사스크립트를 검증하세요. 다음은 스크립트에서 감지된 오류 및 의심스러운 점에 대한 보고서입니다.

Line 16:
  for ((x=0;x<1000;++x)); do
  ^-- SC1009: The mentioned syntax error was in this for loop.
      ^-- SC1073: Couldn't parse this arithmetic for condition. Fix to allow more checks.
                          ^-- SC1061: Couldn't find 'done' for this 'do'.

Line 25:
}
^-- SC1062: Expected 'done' matching previously mentioned 'do'.
 ^-- SC1072: Unexpected keyword/token. Fix any mentioned problems and try again.

답변2

andcoz는 코드의 오류를 보여줍니다(우선, done폐쇄 루프가 누락되었습니다.) 하지만 제 생각엔 당신과 비슷한 것 같아요진짜배열을 원합니다.

코드에서 수행하려는 작업이 명확하지 않지만 명령줄 인수를 배열에 복사하는 것과 거의 동일해 보입니다.

a=( "$@" )

${a[i]}그런 다음 if i가 정수 값을 갖는 변수인 경우 해당 배열의 특정 요소를 가져올 수 있습니다.

$@확장된 큰따옴표는 목록의 개별 요소를 인용하므로 매우 중요합니다 $@. 큰따옴표가 없으면 쉘은 요소(의 내용)를 공백으로 분할 IFS하고 해당 요소에 대해 파일 이름 생성("globbing")을 수행합니다.

break루프가 끝난 후 루프 변수를 해당 값으로 설정하는 대신 루프를 종료하는 데 사용됩니다 .

관련 정보