
for 루프를 사용하여 Arch 설치 스크립트에서 비밀번호를 선택하는 함수를 만들려고 합니다.쉬운 아치) 다음 코드를 사용합니다.이것반복되는 프롬프트에 대한 답변 및이것읽을 개행을 추가하기 위한 것):
#!/bin/bash
errEcho() { echo -e "${BOLD}${BRED}[ ${BBLUE}•${BRED} ] $1${RESET}"; }
for type in encrypt user root; do
pick_${type}pass() {
read -rsp "Enter $type password: " ${type}pass
read -rsp $'\nVerify password: ' ${type}pass2
echo
if [ "$typepass" != "$typepass2" ]; then
errEcho "Passwords don't match."
return 1
fi
return 0
}
done
until pick_userpass; do : ; done
실행할 때 다음 오류가 발생합니다(스크립트가 종료될 때까지 마지막 줄은 스팸 처리됩니다).
./looptest.sh: line 3: `pick_${type}pass': not a valid identifier
./looptest.sh: line 3: `pick_${type}pass': not a valid identifier
./looptest.sh: line 3: `pick_${type}pass': not a valid identifier
./looptest.sh: line 15: pick_userpass: command not found
이 문제를 해결하는 방법을 아는 사람이 있나요?
답변1
짧은 대답: 아니요. 함수를 사용하고 매개변수를 전달하세요. 연관 배열을 사용하십시오.
pick_pass() {
local type=$1
local pass pass2
while true; do
read -rsp "Enter $type password: " pass
read -rsp $'\nVerify password: ' pass2
echo
[[ "$pass" == "$pass2" ]] && break
errEcho "Passwords don't match."
done
password[$type]=$pass
}
declare -A password
for type in encrypt user root; do
pick_pass $type
done
declare -p password
구체적으로 명시되지는 않았지만 실행해 보세요.
declare -p password
Enter encrypt password:
Verify password:
Enter user password:
Verify password:
Enter root password:
Verify password:
bash: errEcho: command not found
Enter root password:
Verify password:
declare -A password=([encrypt]="foo" [root]="asdf" [user]="bar" )