繁体   English   中英

在BASH中将一行回声保存到变量中?

[英]Save one line of echo to variable in BASH?

好吧,答案可能很简单,但我一直在寻找,我无法弄清楚。 我有一个名为“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”的变量中。 我该怎么做呢?

提前致谢。

数组操作:

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

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

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

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

说明

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

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

你能用剪裁吗?

VAL=`echo 'value1*value2*vlaue3*value4*value5' | cut -f5 -d'*'`
IFS=* read -r _{,,,} tmessage _ <<<"$tmessagef"

要么

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

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

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM