检查可选前缀的输入参数

时间:2014-04-20 14:33:35

标签: bash

我正在写一个bash脚本,我需要帮助。

我的脚本将收到3个输入参数。其中一个可能有(不必)-v-n修饰符,例如:

$1="-v image"

如何查看参数的模式?

我可以写点像

tmp=$(echo "$1" | grep "^-v")

对于每个选项和每个参数,然后检查tmp是否为空。但这就像蛮力,我不喜欢它。你能帮帮我吗?

2 个答案:

答案 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"

调用此代码段bananachmod +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]}