Linux 在BASH中将一行echo保存到变量?
好吧,这个问题的答案可能很简单,但我已经搜索了一段时间,我无法找到答案。我有一个变量叫做“tmessagef”。变量的格式如下: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行
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##*\*}"