好的答案可能很简单,但我一直在寻找,我无法弄清楚。我有一个名为“tmessagef”的变量。该变量的格式如下:
value1*value2*vlaue3*value4*value5
我想要的变量的唯一部分是值5.我当前正在使用以下代码,但它只打印每个值而不将它们保存到变量:
OIFS=$IFS
IFS='*'
arr2=$tmessagef
for x in $arr2
do
echo "$x"
done
IFS=$OIFS
我想要做的是获取echo命令产生的第5行,并将其保存到名为“tmessage”的变量中。我该怎么做呢?
提前致谢。
答案 0 :(得分:1)
数组操作:
OIFS="$IFS" IFS='*' Y=($X)
x=${Y[${#Y[@]}-1]}
IFS="$OIFS"
答案 1 :(得分:1)
对于这个非常具体的场景(你只想在最后提取值),你可以使用参数扩展
echo "${word##*\*}"
或将其分配给变量而不是使用“echo”。
<强>解释强>:
##
删除与模式匹配的开头处锚定的最长子字符串*
匹配任意数量的任何字符\*
匹配文字星号基本上,删除以星号结尾的最长子字符串。
答案 2 :(得分:0)
你能用cut?
VAL=`echo 'value1*value2*vlaue3*value4*value5' | cut -f5 -d'*'`
答案 3 :(得分:0)
IFS=* read -r _{,,,} tmessage _ <<<"$tmessagef"
或
[[ $tmessagef =~ ^(.*\*){4}(.*)\* ]]; tmessage=${BASH_REMATCH[2]}
阅读http://mywiki.wooledge.org/BashFAQ/001以及此问题的万亿其他答案。
请勿使用echo。如果您有需要保存的输出,请参阅:http://mywiki.wooledge.org/BashFAQ/002
答案 4 :(得分:0)
我相信mcalex的评论应该回答:
将
echo "$x"
更改为tmessage="$x"
。在循环结束时,$ val将包含最后一个值