別のファイルから抽出されたいくつかの変数を印刷する簡単なスクリプトを作成しようとしています。すべての変数が定義された後の目標は、次の行を印刷することです。
-悪い 0.0 -aswap -AMX -decim $decim -dspfvs $dspfvs -grpdly $grpdly\
したがって、ここで複雑なことは、変数だけでなく - を含む他の多くのシンボルも印刷する必要があることです。 \ 末尾に改行文字が必要です。
頑張りました
echo " -bad 0.0 -aswap -AMX -decim $decim -dspfvs $dspfvs -grpdly $grpdly \\"
これは明らかにうまくいかず、次のような奇妙な出力を得ます。
\rpdly 67ecim 1792
ここで、67と1792は私の変数$ grpdlyと$ decimです。
助けてくれてありがとう!
ベストアンサー1
これはすべてを説明しているわけではありませんが、少なくとも問題の一部は、値の末尾にキャリッジリターンがあることです。これは、次のように印刷されることを意味します。
-bad 0.0 -aswap -AMX -decim 1792<CR>
-dspfvs something<CR>
-grpdly 67<CR>
\\
...各「行」は、改行ではなくキャリッジリターンで区切られているため、前の行の上に印刷されることを除外されます。今説明した内容を出力と比較してみると正確に一致しないので(私の場合「\pdly 6792swap -AMX -decim 1792」提供)、何らかの理由で別のものがあると思います。
その理由は、おそらく読んでいるファイルが各行の終わりにキャリッジリターンと改行を使用するDOS / Windows形式であるためです。 Unixでは、改行のみを使用し、キャリッジリターンをその部分として扱う傾向があります。最後に変数として読むものと同じ行の内容...あなたが得るものと同じです。 1つのオプションは、または同様のプログラムを使用してdos2unix
ファイルをUnix形式に変換することです。別の方法は、次のようにファイルから読み取るときにキャリッジリターンを削除することです。
set decim = `cat decimfile | tr -d '\r'`
(該当するセクションの代わりに使用した実際のコマンドを使用してくださいcat
。) または変数を読んだ後、変数を消去できます。
set decim = `echo $decim | tr -d '\r'`
キャリッジリターンを「作成」する方法にはさまざまなルールがあります。私はいつも「<CR>
」を使用していましたが、tr
「\r」も理解しています。一方、他のプログラムでは「^m」または「^M」を使用します。