0

好的,这个问题的答案可能非常简单,但我已经搜索了一段时间,但我无法弄清楚。我有一个名为“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”的变量中。我该怎么做呢?

提前致谢。

4

5 回答 5

1

对于这个非常具体的场景(您只想在最后提取值),您可以使用参数扩展

echo "${word##*\*}"

或将其分配给变量而不是使用“回声”。

说明

  • ##删除锚定在开头与模式匹配的最长子字符串
  • *匹配任意数量的任意字符
  • \*匹配文字星号

所以基本上,删除以星号结尾的最长子字符串。

于 2012-10-22T05:44:00.490 回答
1

数组操作:

OIFS="$IFS" IFS='*' Y=($X)
x=${Y[${#Y[@]}-1]}
IFS="$OIFS"
于 2012-10-22T05:16:01.023 回答
0

可以用cut吗?

VAL=`echo 'value1*value2*vlaue3*value4*value5' | cut -f5 -d'*'`
于 2012-10-22T05:14:36.233 回答
0

我相信 mcalex 的评论应该回答它:

更改echo "$x"tmessage="$x"。在循环结束时 $val 将包含最后一个值

于 2012-10-22T05:20:53.690 回答
0
IFS=* read -r _{,,,} tmessage _ <<<"$tmessagef"

或者

[[ $tmessagef =~ ^(.*\*){4}(.*)\* ]]; tmessage=${BASH_REMATCH[2]}

阅读http://mywiki.wooledge.org/BashFAQ/001以及这个问题的其他数万亿个答案。

不要为此使用回声。如果您有需要保存的输出,请参阅: http: //mywiki.wooledge.org/BashFAQ/002

于 2012-10-22T05:15:00.917 回答