bash使用参数展开表达式在两个字符串之间读取



我的输入字符串是这样的:

INPUT_STRING="{/p1/p2=grabthistext}"

我想从INPUT_STRING中打印出grabthistext

我尝试了echo "${INPUT_STRING##*=}",它打印grabthistext}

如何使用参数展开表达式读取grabthistext?

如果你真的想要单个参数展开,那么你可以使用:

#!/bin/bash
shopt -s extglob
INPUT_STRING="{/p1/p2=grabthistext}"
echo "${INPUT_STRING//@(*=|})}"
grabthistext

我会使用bash正则表达式:

#!/bin/bash
INPUT_STRING="{/p1/p2=grabthistext}"
[[ $INPUT_STRING =~ =(.*)} ]] && echo "${BASH_REMATCH[1]}"
grabthistext
temp="${INPUT_STRING##*=}" 
echo "${temp%}}"
grabthistext

您可以分两步完成:首先提取=之后的片段,并将其存储在一个新变量中。然后使用相同的技术删除不需要的}后缀:

INPUT_STRING="{/p1/p2=grabthistext}"
TEMP_STRING=${INPUT_STRING##*=}
OUTPUT_STRING=${TEMP_STRING%}}
echo "$OUTPUT_STRING"
# grabthistext

上网查。

最新更新