GNU/Linux >> Linux の 問題 >  >> Linux

シェル変数の割り当てにおける改行の自動変換?

これは、bcの使用に関するこの質問に対する私のコメントの1つから生まれました。 シェルスクリプトで。 bc 改行を大量に配置します。例:

> num=$(echo 6^6^3 | bc)
> echo $num
12041208676482351082020900568572834033367326934574532243581212211450\ 20555710636789704085475234591191603986789604949502079328192358826561\ 895781636115334656050057189523456

ただし、これらは実際には変数の改行ではないことに注意してください。少なくとも、引用符で囲まずに使用されている場合は改行されません。たとえば、割り当てにパイプを追加して浮気する場合、例:

num=$(echo 6^6^3 | bc | perl -pne 's/\\\n//g')

本当に\nがあることに気づきました bcで 出力、echo $num > tmp.txtを確認 hexdumpを使用 \nを表示します (ASCII 10)は、変数代入のスペース(ASCII 32)になっています。

または、少なくとも、引用符で囲まれていない$num >の出力で 。 それはなぜですか?

fedorquiが指摘しているように、引用符を使用する場合:echo "$num" 、再び改行を取得します。これは、echo $num > tmp.1の違いを調べることで明らかです。 およびecho "$num" > tmp.2 hexdumpを使用;前者には\が含まれています (バックスラッシュスペース)一方、後者には\\nが含まれます (バックスラッシュ改行)。

承認された回答:

echo 2つの引数の間にスペースを入れます。シェルは$numの改行を考慮します 単なる単語区切り文字(スペースと同じように)。

lines="a
b
c"
set -x
echo $lines   # several arguments to echo
echo "$lines" # one argument to echo

詳細な説明については、(OP自身による)この回答を参照してください。


Linux
  1. Linux bash:複数の変数の割り当て

  2. 実行中にシェルスクリプトを編集する

  3. 猫の出力を変数に保存すると、すべての改行が削除されます

  1. スクリプト内の bash シェル スクリプトおよび関数の変数スコープ

  2. Linux シェル wc -c カウント文字数 +1

  3. Shell =変数が#で始まるかどうかを確認します

  1. コマンドの出力をシェル変数に保存しますか?

  2. シェルスクリプトの予期しない動作?

  3. シェル論理演算子の優先順位&&、||?