사용자 입력 -s
뒤에 숫자가 오기를 원합니다(예 -s 3
: ). 하지만 기존 변수 옆에 다른 변수를 전달할 수 없는 것 같습니다 -s
. 이것은 내 코드입니다.
echo choose
read choice
case $choice in
-a) echo you chose a
;;
-s $num) echo you chose the number $num #this is the -s number (e.g. -s 3) choice.
;;
esac
exit 0
답변1
현재 수행 중인 작업을 처리하는 더 좋은 방법이 거의 확실합니다. 우선, 사용자에게 입력을 요구하는 것을 피하고 대신 프로그램을 실행할 때 명령줄에 인수를 제공하도록 해야 합니다. 단, 작동하도록 코드를 수정해야 합니다.
read -rp 'choose: ' choice
case $choice in
-a) echo 'you chose a';;
-s\ [1-4]) "echo you chose the number ${choice#"-s "}";;
esac
변수 num
가 설정된 것 같지 않으므로 null로 확장되어 사례 패턴이 단순해지고 일치하지 않습니다. -s )
왜냐하면 -s 4
... -s )
음, 동일하지 않기 때문입니다. 그래서 -s\ [1-4])
뒤에 숫자( )가 붙도록 수정해야 합니다 . 그런 다음 매개변수 확장을 사용하여 를 제거합니다 -s
.
내가 처리하는 방법은 getopts
다음과 같은 것을 사용하는 것입니다.
#!/bin/bash
while getopts as: opt; do
case $opt in
a) printf '%s\n' 'You have chosen: a';;
s) n=$OPTARG; printf '%s: %d\n' 'You have chosen s with an argument of' "$n";;
esac
done
이를 통해 다음과 같은 매개변수를 지정하여 명령줄에서 실행할 수 있습니다.
./script.sh -s 4