Forneça três argumentos para uma opção usando getopts no bash [duplicate]

2

Estou tentando processar uma linha de comando usando getopts no bash. Eu tenho que passar três argumentos após a opção -w. Por exemplo, -w 1 do loop. Deve imprimir uma linha antes e depois de cada linha do loop que contém o padrão. Este é o código que tenho agora:

#!/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"

Existe alguma maneira de recuperar as três variáveis de uma bandeira?

    
por wkaren114 01.09.2015 / 19:22

1 resposta

3

Apenas um argumento pode ser passado para uma opção, mas você pode especificar a, b, c e mais tarde definir temporariamente o IFS como ',' e usar a leitura para dividir o argumento a, b, c em três palavras.

Por exemplo:

$ OPTARG="1,do,loop"
$ IFS=, read n patt file <<<"$OPTARG"
$ echo $n; echo $patt; echo $file
1
do
loop
    
por 01.09.2015 / 19:36