好吧,答案可能真的很简单,但是我一直在搜索一段时间,但我无法弄清楚。我有一个称为" 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'*'`