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