![문자열이 숫자로 끝나는지 확인하면 "예기치 않은 연산자"가 발생합니다.](https://linux55.com/image/160343/%EB%AC%B8%EC%9E%90%EC%97%B4%EC%9D%B4%20%EC%88%AB%EC%9E%90%EB%A1%9C%20%EB%81%9D%EB%82%98%EB%8A%94%EC%A7%80%20%ED%99%95%EC%9D%B8%ED%95%98%EB%A9%B4%20%22%EC%98%88%EA%B8%B0%EC%B9%98%20%EC%95%8A%EC%9D%80%20%EC%97%B0%EC%82%B0%EC%9E%90%22%EA%B0%80%20%EB%B0%9C%EC%83%9D%ED%95%A9%EB%8B%88%EB%8B%A4..png)
실행 중인 스크립트의 파일 이름이 숫자로 끝나는지 확인하려고 합니다.
#!/bin/sh
name=$(basename "$0" .sh)
[ $name =~ ^.[0-9]$ ] && numb=$(echo $name | sed 's/[^0-9]*//g') || numb=1
echo $numb
내 쉘 파일의 이름은 다음 mh03.sh
과 같습니다. 실행 시 출력은 다음과 같습니다.
$ ./mh3.sh
./mh3.sh: 3: [: mh3: unexpected operator
1
누군가 이 예외가 발생하는 이유와 해결 방법을 말해 줄 수 있습니까?
답변1
=~
단일 대괄호 내에서는 정규식 일치 연산자가 지원되지 않습니다. 작동하려면 이중 대괄호가 필요합니다.
[[ $name =~ ^.[0-9]$ ]]
정규식이 필요하지 않으며 일반 모드를 사용할 수 있습니다.
[[ $name = *[0-9] ]]
또는 이름 앞에 숫자 앞에 내용이 포함되어야 하는 경우
[[ $name = *?[0-9] ]]
답변2
[:=~: 이항 연산자가 필요합니다.
오류는 [$name =~ ^.[0-9]$ ]
[] 안에 있습니다.
노력하다,
#!/bin/sh
name=$(basename "$0" .sh)
[[ $name =~ ^.[0-9]$ ]] && numb=$(echo $name | sed 's/[^0-9]*//g') || numb=1
echo $num
효과가있다.