我正在写一个bash脚本,我需要帮助。
我的脚本将收到3个输入参数。其中一个可能有(不必)-v
或-n
修饰符,例如:
$1="-v image"
如何查看参数的模式?
我可以写点像
tmp=$(echo "$1" | grep "^-v")
对于每个选项和每个参数,然后检查tmp
是否为空。但这就像蛮力,我不喜欢它。你能帮帮我吗?
答案 0 :(得分:1)
这应该做:
#!/bin/bash
shopt -s extglob
case $1 in
(-v\ *) arg=${1#-v+([[:space:]])}; mod=v ;;
(-n\ *) arg=${1#-n+([[:space:]])}; mod=n ;;
(*) arg=$1; mod=;;
esac
echo "mod: $mod"
echo "arg: $arg"
调用此代码段banana
和chmod +x banana
。然后:
$ ./banana '-v image'
mod: v
arg: image
$ ./banana '-n image'
mod: n
arg: image
$ ./banana 'image-v'
mod:
arg: image-v
$ ./banana '-vimage'
mod:
arg: -vimage
答案 1 :(得分:0)
使用bash的正则表达式匹配运算符=~
的更简洁的替代方法:
# Assumes that $1 is the argument of interest and that it contains something like
# '-n val', '-v val', or 'val'; $mode will receive the option letter only, if any.
mode='' arg=$1
[[ $1 =~ ^-([vn])\ *(.*)$ ]] && mode=${BASH_REMATCH[1]} arg=${BASH_REMATCH[2]}