Bashでは、これを試してみました:
echo -e "hello\nworld"
しかし、それは改行を表示せず、\n
のみを出力します。改行を印刷するにはどうすればいいですか。
Ubuntu 11.04を使っています。
代わりにprintf
を使用することもできます。
printf "hello\nworld\n"
printf
はecho
よりも一貫した振る舞いをします。 echo
の動作はバージョンによって大きく異なります。
あなたは不意を突いていますか?私のために働く、3つすべての方法:
echo -e "Hello\nworld"
echo -e 'Hello\nworld'
echo Hello$'\n'world
echo $'hello\nworld'
版画
hello
world
$''
文字列は ANSI C引用符を使用 :
形式
$'string'
の単語は特別に扱われます。御言葉は ひもANSI C規格で指定されているように、バックスラッシュでエスケープされた文字が置き換えられます。
いつでもecho ""
を実行できます。
例えば.
echo "Hello"
echo ""
echo "World"
なぜ同僚の台本が改行を印刷しないのかを突き止めようとして、誰かが自分の頭を壁にぶつけているのに気付く可能性があるので、この点に注意してください - >
#!/bin/bash
function GET_RECORDS()
{
echo -e "starting\n the process";
}
echo $(GET_RECORDS);
上記のように、メソッドの実際の実行自体は、メソッド自体にある可能性のあるエコーよりも優先されるエコーでラップされる場合があります。これを簡潔にするために明らかにしましたが、見つけるのはそれほど簡単ではありませんでした。
そうすれば、関数を実行するためのより良い方法は以下のようになると仲間に知らせることができます。
#!/bin/bash
function GET_RECORDS()
{
echo -e "starting\n the process";
}
GET_RECORDS;
やってみる
echo -e "hello\nworld"
hello
world
私はナノエディタで働いていました。
これはRaspbianで私のために働きます、
echo -e "hello\\nworld"
str='hello\nworld'
$ echo | sed "i$str"
hello
world
エコー時のPOSIX 7
http://pubs.opengroup.org/onlinepubs/9699919799/utilities/echo.html
-e
は定義されておらず、バックスラッシュは実装で定義されています。
最初のオペランドが-nの場合、またはいずれかのオペランドに<backslash>文字が含まれている場合、結果は実装定義です。
オプションのXSI拡張子がない限り。
そのため、代わりに printf
を使用してください。
formatオペランドは、XBDファイルフォーマット表記法[...]で説明されているフォーマット文字列として使用されます。
\ n <改行>印刷位置を次の行の先頭に移動します。
Ubuntu 15.10とほとんどのディストリビューションはecho
を両方とも次のように実装していることにも注意してください。
help echo
which echo
混乱を招く可能性があります。
それはCentOSで私のために働きます:
echo -e ""hello\nworld""
これらの解決策のどれともうまくいかなかった、そしてそれらの関数から戻り値を得る必要がある人たちのためのもう一つのエントリがここにあります:
function foo()
{
local v="Dimi";
local s="";
.....
s+="Some message here $v $1\n"
.....
echo $s
}
r=$(foo "my message");
echo -e $r;
私がこのbashで作業していたLinuxでは、このトリックだけが機能しました。
GNU bash, version 2.2.25(1)-release (x86_64-redhat-linux-gnu)
それが同様の問題を抱えている人に役立つことを願っています。
次のこともできます。
echo "hello
world"
これはスクリプト内部とコマンドラインの両方から機能します。
コマンドラインで、を押す Shift+Enter 文字列の内側で改行します。
これは私のmacOSと私のUbuntu 18.04で私のために働きます
これはよりよくすることができます
x="\n"
echo -ne $x
-eオプションはエスケープシーケンスのバックスラッシュを解釈します
- nオプションは、出力の末尾の改行を削除します
シモンズ:コマンドechoは出力の末尾の改行を常に含む効果があるので、-nはそれをオフにするために必要です(そして混乱を少なくするため)。
私のスクリプト:
echo "WARNINGS: $warningsFound WARNINGS FOUND:\n$warningStrings
出力:
WARNING : 2 WARNINGS FOUND:\nWarning, found the following local orphaned signature file:
私のbashスクリプトでは、試してみるまで怒っていました。
echo "WARNING : $warningsFound WARNINGS FOUND:
$warningStrings"
そのジャンプを挿入したい場所にエンターキーを押すだけです。今出力されます:
WARNING : 2 WARNINGS FOUND:
Warning, found the following local orphaned signature file:
エコーを中括弧とともに使用することもできます。
$ (echo hello; echo world)
hello
world
時々、スペースで区切られた複数の文字列を渡すことができ、それは\n
として解釈されます。
たとえば、複数行の通知にシェルスクリプトを使用する場合は、次のようになります。
#!/bin/bash
notify-send 'notification success' 'another line' 'time now '`date +"%s"`
エスケープシーケンスを解釈するnewパラメータ展開 がbash 4.4
に追加されました。
${parameter@operator} - E operator
展開は、
$'…'
引用メカニズムと同様に展開されたバックスラッシュエスケープシーケンスを持つparameterの値である文字列です。
$ foo='hello\nworld'
$ echo "${foo@E}"
hello
world
場合によっては、長いコード(コードなど)をenv var連結でエコーする必要があり、単純にしたいと考えました。
echo -e
、printf
には制限があるかもしれません
改行のプレースホルダーとして特殊な文字を使用できます(~
など)
そしてこれを試してください:
echo ${content} | tr '~' '\n' > $targetFile
それは素晴らしいIMOであるべきである別のプログラム(tr
)を呼び出す必要があります。
単純タイプ
エコー
改行する
スクリプトを作成していて、他のメッセージの一部として改行を数回エコーする場合、ニースのクロスプラットフォームソリューションは、リテラルの改行を次のように変数に入れることです。
newline='
'
echo "first line$newlinesecond line"
echo "Error: example error message n${newline}${usage}" >&2 #requires usage to be defined
Bashプロファイル(MacOx、iTerm)でエイリアスとして使用するときは、テキストを二重引用符で囲む必要がありました。
alias helloworld="echo -e \"hello \n world\""