Linux 在BASH中将一行echo保存到变量?

Linux 在BASH中将一行echo保存到变量?,linux,bash,echo,Linux,Bash,Echo,好吧,这个问题的答案可能很简单,但我已经搜索了一段时间,我无法找到答案。我有一个变量叫做“tmessagef”。变量的格式如下: value1*value2*vlaue3*value4*value5 我想要的变量的唯一部分是值5。我目前正在使用以下代码,但它只打印每个值,不将它们保存到变量中: OIFS=$IFS IFS='*' arr2=$tmessagef for x in $arr2 do echo "$x" done IFS=$OIFS 我想做的是获取echo命令生成的第5行

好吧,这个问题的答案可能很简单,但我已经搜索了一段时间,我无法找到答案。我有一个变量叫做“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”的变量中。我该怎么做呢

提前谢谢。

你能用cut吗

VAL=`echo 'value1*value2*vlaue3*value4*value5' | cut -f5 -d'*'`
阅读并回答这个问题

不要用echo来做这个。如果有需要保存的输出,请参阅:

数组操作:

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

我认为mcalex的评论应该回答这个问题:

echo“$x”
更改为
tmessage=“$x”
。循环结束时,$val将包含最后一个值


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

echo "${word##*\*}"
或者将其分配给变量,而不是使用“echo”

说明

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

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

将“echo”改为“tmessage=”@Rohan你什么意思?将
echo“$x”
改为
val=“$x”
。循环结束时,
$val
将包含最后一个值。因为您的测试值不包含当前目录中名为
5
的文件,例如
[0-9]
。应该避免使用IFS进行分词。是的,cut不是bash,但您通常可以通过组合已提供的简单工具来实现所需的功能。是的$VAL=应该是VAL=,经过编辑。如果我们修改语法,这是最简单的答案。在bash中,我们可以编写
val=$(cut-d\*-f5,我想mcalex是最先到达那里的
OIFS="$IFS" IFS='*' Y=($X)
x=${Y[${#Y[@]}-1]}
IFS="$OIFS"
echo "${word##*\*}"