![在 bash 中使用 getopts 为一个选项提供三个参数](https://linux22.com/image/72085/%E5%9C%A8%20bash%20%E4%B8%AD%E4%BD%BF%E7%94%A8%20getopts%20%E4%B8%BA%E4%B8%80%E4%B8%AA%E9%80%89%E9%A1%B9%E6%8F%90%E4%BE%9B%E4%B8%89%E4%B8%AA%E5%8F%82%E6%95%B0.png)
我正在尝试在 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