文字列変数から末尾の改行文字を削除中に停止する

文字列変数から末尾の改行文字を削除中に停止する

時々、シェルスクリプトを気にせずに書いている間、最も簡単なことにも数時間かかることがあります。

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 
$ 

おすすめ記事