0

さて、これに対する答えは本当に簡単かもしれませんが、私はしばらく探していて、それを理解することができません。「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」という変数に保存することです。どうすればこれを行うことができますか?

前もって感謝します。

4

5 に答える 5

1

配列操作:

OIFS="$IFS" IFS='*' Y=($X)
x=${Y[${#Y[@]}-1]}
IFS="$OIFS"
于 2012-10-22T05:16:01.023 に答える
1

この非常に特殊なシナリオ(最後に値を抽出するだけの場合)では、パラメーター展開を使用できます。

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

または、「echo」を使用する代わりに変数に割り当てます。

説明

  • ##パターンに一致する最初に固定された最長の部分文字列を削除します
  • *任意の数の任意の文字に一致します
  • \*文字通りのアスタリスクに一致します

したがって、基本的に、アスタリスクで終わる最長のサブストリングを削除します。

于 2012-10-22T05:44:00.490 に答える
0

カットは使えますか?

VAL=`echo 'value1*value2*vlaue3*value4*value5' | cut -f5 -d'*'`
于 2012-10-22T05:14:36.233 に答える
0
IFS=* read -r _{,,,} tmessage _ <<<"$tmessagef"

また

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

http://mywiki.wooledge.org/BashFAQ/001と、この質問に対する他の何兆もの回答を読んでください。

これにはエコーを使用しないでください。保存が必要な出力がある場合は、http://mywiki.wooledge.org/BashFAQ/002を参照してください。

于 2012-10-22T05:15:00.917 に答える
0

私はmcalexのコメントがそれに答えるべきだと信じています:

に変更echo "$x"tmessage="$x"ます。ループの終わりに、$valには最後の値が含まれます

于 2012-10-22T05:20:53.690 に答える