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

エコー改行文字が bash で機能しない

echo の複雑な歴史 デフォルトの操作はシェルごとに異なることを意味します。 POSIX では、echo の結果が 最初の引数が -n の場合、「実装定義」です または任意の引数にバックスラッシュが含まれています。

printf を使用する方が信頼性が高くなります (組み込みコマンドまたは外部コマンドのいずれかとして) 動作がより明確に定義されている場合:C スタイルのバックスラッシュ エスケープと書式指定子が書式文字列 (最初の引数) でサポートされています。

printf 'foo\nbar\n'
printf '%s\n%s\n' foo bar

bash のバックスラッシュ エスケープ シーケンスの展開を制御できます の echo xpg_echo を使用した組み込みコマンド シェル オプション。

bash の先頭に設定します echo にするスクリプト -e を追加することなく、バックスラッシュ エスケープを自動的に展開します

shopt -s xpg_echo
echo 'foo\nbar'

printf を使用することをお勧めします すべての新しいスクリプト用。

printf '%s\n%s\n' "Hello" "World"

printf '%s\n' "Hello\nWorld"

bash myfile.sh を使用する場合 、Bash は「バッチ」モードで実行され、 処理し、しない プロファイルまたは rcfile を読み取ります。

. myfile.sh を使用する場合 、ファイルはソースです 現在のシェル プロセスによって (その内容がユーザーによって入力されたかのように)、したがって、現在定義されているエイリアスが表示されます。

一般に、特定のシェル構成に依存するスクリプトを作成することは非常に悪い考えです。特に スクリプトで定義しない限り、エイリアス 自体。 (決して ユーザーの .bashrc に依存する 、たとえそれがあなた自身のものであっても。)


Linux
  1. Curl Outfile変数がBashスクリプトで機能しませんか?

  2. 囲み対変数の値をBashの引用符で囲んでいないのですか?

  3. Bashでのケースステートメントの使用

  1. printf:コマンドが見つかりません

  2. エコー:コマンドが見つかりません

  3. Bash/sh 'if else' ステートメント

  1. Bash ループのカウンター インクリメントが機能しない

  2. bash sh - コマンドが見つかりません

  3. Linux コマンド 'll' が機能しない