在 bash 中使用 getopts 为一个选项提供三个参数

在 bash 中使用 getopts 为一个选项提供三个参数

我正在尝试在 bash 中使用 getopts 处理命令行。我必须在 -w 选项之后传递三个参数。例如,-w 1 do 循环。它应该在包含模式 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

相关内容