getopts를 사용하여 bash의 옵션에 세 가지 인수 제공

getopts를 사용하여 bash의 옵션에 세 가지 인수 제공

bash에서 getopts를 사용하여 명령줄을 처리하려고 합니다. -w 옵션 뒤에 세 개의 매개변수를 전달해야 합니다. 예를 들어, -w 1은 루프를 수행합니다. do 패턴을 포함하는 루프의 각 줄 앞과 뒤에 한 줄을 인쇄해야 합니다. 이것은 내 현재 코드입니다.

#!/bin/bash
file=`ls | grep ^$1$`
pattern=`cat $file |grep -B$2 -A$2 $3`
while getopts":w:" opt
do
case $opt in
    w) $2=$OPTARG ; pattern=$OPTARG ; file=$OPTARG ;array=($OPTARG)
    ;;
    *)echo " usage: -w <pattern>"
    exit 1
    ;;
esac
done

echo "${#array[@]}"
echo "line: $2, pattern: $pattern, file: $file"

하나의 플래그에서 세 개의 변수를 검색하는 방법이 있습니까?

답변1

옵션당 하나의 인수만 전달할 수 있지만 a, b, c를 지정한 다음 임시로 IFS를 ","로 설정하고 read를 사용하여 인수 a, b, c를 세 단어로 분할할 수 있습니다.

예를 들어:

$ OPTARG="1,do,loop"
$ IFS=, read n patt file <<<"$OPTARG"
$ echo $n; echo $patt; echo $file
1
do
loop

관련 정보