BASH - OPTARG 中的 getopts 正则表达式

1 bash quotes glob getopts

我需要使用 getopts 从参数中获取正则表达式

./function -i "d*"
Run Code Online (Sandbox Code Playgroud)
while getopts 'i:n' opt; do
  # check -i and -n arg
    case "$opt" in
      i)
        i=true
        pattern=$OPTARG;;
    esac
  done
echo $pattern
Run Code Online (Sandbox Code Playgroud)

输出是darProVas dirgraf-copy dirgraf-my:以 . 开头的文件列表d。我需要这个输出:d*.

Joh*_*ica 5

$pattern设置正确。确保在扩展时引用它以抑制全局扩展。不带引号的变量会受到分词和全局扩展的影响,这几乎总是不受欢迎的。

echo "$pattern"
Run Code Online (Sandbox Code Playgroud)

  • 除非您确实想将其用作模式。如果不加引号则保留: `if [[ $somevar =~ $pattern ]]; 然后...` (4认同)