我正在尝试在 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