時々、シェルスクリプトを気にせずに書いている間、最も簡単なことにも数時間かかることがあります。
Content='me \n you \n him \n'
echo $Content > Names.txt
開くNames.txt
と、最後に2つの空行があります。
空の行が1つしかありません。このContent
変数はループで評価され、反復ごとに新しい行が追加されます。だから私は変更できませんContent
。
echo -n
新しい行をすべて削除するため使用できません。
\n
この場合、すべての行が互いに接続されているため、ループから削除することはできません。
Content=$(echo $Content | awk 'NR>1{print PREV} {PREV=$0} END{printf("%s",$0)}')
末尾の改行を削除してみましたが、うまくawk
いきません。このサイトの回答から取得しました。
printf %s $Content > File.txt
代わりに試してみましたが、echo -e
まだ成功していません。
与えられた文字列変数から末尾の改行を削除したり、ファイルにそのまま書き込んだり、Linuxに他の行を追加したりしないように指示するにはどうすればよいですか?
ベストアンサー1
これは2番目の改行を追加するLinuxではありません。呼び出すとbashですecho
!
したがって、答えはシェルの組み込み関数のドキュメントにありますman builtins
。
echo [-neE] [arg ...] Output the args, separated by spaces, followed by a newline. The return status is 0 unless a write error occurs. If -n is specified, the trailing newline is suppressed.
これでecho -n
トリックが完了しました。実際には、echo -ne
それ以外-e
の場合はファイルにリテラル文字列が含まれるため、使用する必要があります。
me \n you \n him \n
(その中に「バックスラッシュn」があります!!)
echo -n はすべての新しい行を削除するので使用できません。
いいえ、そうではありません。
編集:次のコマンドダイアログボックスとその出力は、実行時に上記のbash
説明を確認します。
$ Content='me \n you \n him \n'
$ echo $Content > Names.txt
$ cat Names.txt
me \n you \n him \n
$ echo -e "$Content" > Names.txt
$ cat Names.txt
me
you
him
$ echo -en "$Content" > Names.txt
$ cat Names.txt
me
you
him
$