我有这样的字符串
var="--env=test --arg=foo"
我尝试使用子字符串${var#*=}
来获取test
,但没有找到分隔空格的方法。我有什么想法或者应该使用cut
吗?
答案 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