Linux Bash: 変数を別の変数に

Linux Bash: 変数を別の変数に

私はこれを持っています:

echo $MSG | sed -e $'s/;/\\\n/g'

sedの結果を$ MSG2という新しい変数に入れたいです。

それは次のとおりです。

$MSG2=echo $MSG|sed -e $'s/;/\\\n/g'

どうすればいいですか?

ありがとうございます!

答え1

作業にはパイプやsedは必要ありません。bash以下のように組み込みコマンドを使用すると、これらすべてをより効率的に実行できます。

NewMsg=${MSG//;/$'\n'}

${MSG//;/$'\n'}はいパターン交換。各項目を;改行文字に置き換えます。結果はシェル変数に保存されますNewMsg

たとえば、

$ Msg='1;2;3'
$ NewMsg=${Msg//;/$'\n'}
$ echo "$NewMsg"
1
2
3

メモ:

  1. 最良の方法は、小文字または大文字と小文字の混合シェル変数を使用することです。システムは変数にすべて大文字を使用するため、誤って変数の1つを上書きしたくありません。

  2. 明示的に望まない限り噴射そしてパス名拡張シェル変数は常に二重引用符で囲みます。したがって、使用したいときはecho $MSG代わりに使用してくださいecho "$MSG"

  3. また、エコーしたい文字列にどの文字が含まれているのかわからないと、問題が発生し、使いやすく、よりecho移植性に優れていますprintf '%s\n' "$MSG"。詳しくはStéphane Chazelasをご覧ください。echoVSに関する非常に有益な議論printf

  4. コマンド置換を使用すると、$(...)シェルは末尾の改行を削除します。これはしばしば役に立ちますが、時にはこの変更は不要です。

答え2

次のように変数に割り当てます。

MSG2=$(echo $MSG | sed -e $'s/;/\\n/g')

関連情報