用空格分隔的Bash子串
我有一根这样的绳子用空格分隔的Bash子串,bash,Bash,我有一根这样的绳子 var="--env=test --arg=foo" 我尝试使用substring${var#*=}来获取示例test,但没有找到分隔空格的方法。我应该使用cut吗?你可以使用数组: $ var="--env=test --arg=foo" $ arr=($var) $ printf "%s\n" "${arr[@]}" --env=test --arg=foo 其中,var中的标记由IFS分割(默认为:空格、制表符、换行符)。如果只想按空格分割,只需设置IFS='':
var="--env=test --arg=foo"
我尝试使用substring
${var#*=}
来获取示例test
,但没有找到分隔空格的方法。我应该使用cut
吗?你可以使用数组:
$ var="--env=test --arg=foo"
$ arr=($var)
$ printf "%s\n" "${arr[@]}"
--env=test
--arg=foo
其中,var
中的标记由IFS
分割(默认为:空格、制表符、换行符)。如果只想按空格分割,只需设置IFS=''
:
IFS=' ' arr=($var)
您可以使用数组:
$ var="--env=test --arg=foo"
$ arr=($var)
$ printf "%s\n" "${arr[@]}"
--env=test
--arg=foo
其中,var
中的标记由IFS
分割(默认为:空格、制表符、换行符)。如果只想按空格分割,只需设置IFS=''
:
IFS=' ' arr=($var)
您可以使用BASH regex:
var="--env=test --arg=foo"
[[ $var =~ =([^ ]+) ]] && echo "${BASH_REMATCH[1]}"
test
使用
extglob
,您可以在更短的代码中执行此操作:
shopt -s extglob
echo "${var//+( *|+([! ])=)}"
test
您可以使用BASH regex:
var="--env=test --arg=foo"
[[ $var =~ =([^ ]+) ]] && echo "${BASH_REMATCH[1]}"
test
使用
extglob
,您可以在更短的代码中执行此操作:
shopt -s extglob
echo "${var//+( *|+([! ])=)}"
test
util linux
(应该是任何linux发行版的一部分)内置了对命令行解析的支持
在您的情况下的用法:
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
util linux
(应该是任何linux发行版的一部分)内置了对命令行解析的支持
在您的情况下的用法:
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
你一开始就不应该有这样一根绳子。这表明存在设计缺陷。你是怎么得到的?如果它是在脚本中定义的,您应该重写它以使用数组。您首先不应该有这样的字符串。这表明存在设计缺陷。你是怎么得到的?如果它是在脚本中定义的,您应该重写它以使用数组。这是唯一避免拆分和全局化的解决方案。这是唯一避免拆分和全局化的解决方案。