Bash子字符串由空格分隔

时间:2017-08-09 16:07:43

标签: bash

我有这样的字符串

var="--env=test --arg=foo"

我尝试使用子字符串${var#*=}来获取test,但没有找到分隔空格的方法。我有什么想法或者应该使用cut吗?

3 个答案:

答案 0 :(得分:2)

您可以使用BASH正则表达式:

var="--env=test --arg=foo"
[[ $var =~ =([^ ]+) ]] && echo "${BASH_REMATCH[1]}"

test

使用extglob,您可以使用更短的代码执行此操作:

shopt -s extglob
echo "${var//+( *|+([! ])=)}"
test

答案 1 :(得分:1)

您可以使用数组:

$ var="--env=test --arg=foo"
$ arr=($var)
$ printf "%s\n" "${arr[@]}"
--env=test
--arg=foo

var中的标记被IFS拆分(默认为:空格,制表符,换行符)。如果您想按空格分割 ,只需设置IFS=' '

IFS=' ' arr=($var)

答案 2 :(得分:1)

util-linux(应该是任何Linux发行版的一部分)内置支持getopts命令行解析。

在您的情况下使用:

var="blub --env=test --arg=foo"

eval set -- $(getopt --longoptions env:,arg: -- $var)
while true ; do
    case "$1" in
        --arg)
        echo "Arg is $2"
        shift 2
            ;;
        --env)
        echo "Env is $2"
        shift 2
        ;;
        --) shift ; break ;;
    esac
done