我对bash和shell脚本非常陌生。我有一根绳子
string="new string added -value:ABC-10"现在我想要的是在-value:之后得到字符串。
我正在使用bash 5。Things的列表尝试了。
除了IFS之外,其他所有解决方案都给出了语法错误"(“预期”}“),我和尝试了所有可能的组合,但都没有成功。
任何帮助都是非常感谢的。
提前谢谢。
发布于 2021-07-08 08:45:56
这是直接与bash。试着:
printf "%s\n" "${string##*-value:}"bash的男人
${parameter#word} ${parameter##word}删除匹配的前缀模式。该单词被展开以产生一个模式,就像在路径名称展开中一样,并使用下面模式匹配下面描述的规则与参数的扩展值相匹配。如果模式与参数值的开头匹配,则展开的结果是删除参数的扩展值,并删除最短匹配模式(
#'' case) or the longest matching pattern (the##‘大小写)。如果参数为@或*,则模式移除操作依次应用于每个位置参数,扩展为结果列表。如果参数是以@或*订阅的数组变量,则模式删除操作依次应用于数组的每个成员,扩展是结果列表。
发布于 2021-07-08 08:42:38
使用cut或awk如何?
echo "$string" | awk -F '-value:' '{print $2}'使用cut,您只能在单个字符上拆分,因此在剪切时,它会希望:
echo "$string" | cut -d ":" -f 2发布于 2021-07-08 09:14:09
使用IFS和read
string="new string added -value:ABC-10"
IFS=: read -r junk value <<< "$string"
echo "$value"使用mapfile,又名readarray,这是一个bash4+特性。
mapfile -td: array <<< "$string"
echo "${array[@]:1}"这也相当于
echo "${array[1]}"https://stackoverflow.com/questions/68298092
复制相似问题