read 명령을 통해 bash 변수에 작성된 문자열이 두 숫자의 튜플인지 확인하고 싶습니다. 내가 아는 한 이것은 다음을 통해 작동해야 합니다.
if [[ "$input" =~ "$regex" ]]; then ...
적어도 하나의 공백과 전후의 공백 수로 구분된 두 숫자의 튜플에 대해 나는 다음을 시도했습니다.
$regex="^ *[0-9]+ +[0-9]+ *$"
일치해야
12 123
23 3246543
123 345
34 23
1 234
하지만
123 123 123
1235124
123w123 123
etc.
그러나 이것은 작동하지 않습니다 ...
답변1
POSIX인수 확장을 사용하여 첫 번째와 두 번째 숫자를 가져오고, -eq
두 인수가 모두 동일한 숫자인 경우에만 성공하고(인수가 더 적거나 더 많거나 둘 중 하나에 문자가 포함된 경우 실패) 공백을 확인하는 쉘 스크립트 함수입니다 !=
. 상품을 반품하다진짜두 숫자의 튜플인 경우에만:
is_tup() { [ ${1% *} -eq ${1% *} -a \
${1#* } -eq ${1#* } -a "${1% *}" != "$1" ] 2> /dev/null ; }
시험:
echo '12 123
23 3246543
123 345
34 23
1 234
123 123 123
1235124
123w123 123' |
while read x ; do is_tup "$x" && a=yes || a=no ; printf '%s\t%s\n' $a "$x" ; done
산출:
yes 12 123
yes 23 3246543
yes 123 345
yes 34 23
yes 1 234
no 123 123 123
no 1235124
no 123w123 123