![Bash: "[0-9]+$" 정규식은 3자리 숫자만 일치하지 않습니다.](https://linux55.com/image/204673/Bash%3A%20%22%5B0-9%5D%2B%24%22%20%EC%A0%95%EA%B7%9C%EC%8B%9D%EC%9D%80%203%EC%9E%90%EB%A6%AC%20%EC%88%AB%EC%9E%90%EB%A7%8C%20%EC%9D%BC%EC%B9%98%ED%95%98%EC%A7%80%20%EC%95%8A%EC%8A%B5%EB%8B%88%EB%8B%A4..png)
"eid" 필드의 길이가 3자리이고 모두 숫자인지 확인하기 위해 다음 코드를 실행했습니다.
#!/usr/bin/bash
input="A01#PoonamSahani#IVS#123456"
#recCount=`echo $input | awk -F "#" '{print NF}'`
eid=`echo $input | cut -d "#" -f 1`
ename=`echo $input | cut -d "#" -f 2`
dept=`echo $input | cut -d "#" -f 3`
salary=`echo $input | cut -d "#" -f 4`
if [[ ${#eid} == 3 && $eid =~ [0-9]+$ ]]
then
echo "$eid"
else
echo "Check"
fi
실행 후 다음과 같은 결과가 나타납니다.
root@ip-xx-xx-xx-xx:~# ./3ex.sh
A01
여기에 무엇이 빠졌는지 알려주십시오.
답변1
더 나은 방법을 찾았지만 4개의 개별 입력이 필요하므로 스크립트는 여전히 매우 비효율적입니다. 필요하지 않습니다. 단 한 단계만 수행하면 됩니다.
#!/usr/bin/bash
input="A01#PoonamSahani#IVS#123456"
read -d '#' eid ename dept salary <<<"$input"
if [[ ${#eid} == 3 && $eid =~ ^[0-9]+$ ]]
then
echo "$eid"
else
echo "Check"
fi
답변2
^
처음에는 다음을 사용해야 합니다 .
if [[ ${#eid} == 3 && $eid =~ ^[0-9]+$ ]]