그래서 스크립트를 실행할 때 각 매개변수에 대해 새 변수를 생성하는 함수를 스크립트에서 생성해 보았습니다. 이것은 내 코드입니다.
#!/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
루프가 끝난 후 루프 변수를 해당 값으로 설정하는 대신 루프를 종료하는 데 사용됩니다 .