将一行回声保存到bash中的变量



好吧,答案可能真的很简单,但是我一直在搜索一段时间,但我无法弄清楚。我有一个称为" tmessagef"的变量。该变量的格式如:

value1*value2*vlaue3*value4*value5

我想要的变量的唯一部分是值5。我当前正在使用以下代码,但它仅打印每个值,而不会将它们保存到变量:

OIFS=$IFS
IFS='*'
arr2=$tmessagef
for x in $arr2
do
    echo "$x"
done
IFS=$OIFS

我想做的是获得回声命令产生的第五行,并将其保存到称为" tmessage"的变量中。我该怎么做?

预先感谢。

数组操纵:

OIFS="$IFS" IFS='*' Y=($X)
x=${Y[${#Y[@]}-1]}
IFS="$OIFS"

对于此非常具体的方案(您只想在其中提取值),您可以使用参数扩展

echo "${word##**}"

或将其分配给变量而不是使用" echo"。

说明

  • ##删除了与模式匹配的开头最长的子字符串
  • *匹配任何字符的任何数字
  • *匹配字面星号

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

我相信McAlex的评论应该回答:

echo "$x"更改为tmessage="$x"。在循环的结尾,$ val将包含最后一个值

IFS=* read -r _{,,,} tmessage _ <<<"$tmessagef"

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

阅读http://mywiki.wooledge.org/bashfaq/001和此问题的其他答案。

不要为此使用Echo。如果您的输出需要保存,请参见:http://mywiki.wooledge.org/bashfaq/002

您可以使用剪切吗?

VAL=`echo 'value1*value2*vlaue3*value4*value5' | cut -f5 -d'*'`

最新更新