バッシュでこれを試しました:
echo -e "hello\nworld"
ただし、改行は出力されません\n
。改行を印刷させるにはどうすればよいですか?
Ubuntu 11.04を使用しています。
バッシュでこれを試しました:
echo -e "hello\nworld"
ただし、改行は出力されません\n
。改行を印刷させるにはどうすればよいですか?
Ubuntu 11.04を使用しています。
回答:
printf
代わりに使用できます:
printf "hello\nworld\n"
printf
はよりも一貫した動作をしecho
ます。の動作は、echo
バージョンによって大きく異なります。
printf %"s\n" hello world
--引数が多すぎる場合、printfはフォーマットを再利用します
echo
たまたま-e
オプションをサポートしている場合に適しています。
echo
、-e
は出力自体に出力されるだけなので、echo
ここでは一貫性がないため、この答えは完全に有効であると思います(特定のバージョンについて話している場合を除く)。
本当にバッシュですか?私にとっては、4つの方法すべてで機能します。
echo -e "Hello\nworld"
echo -e 'Hello\nworld'
echo Hello$'\n'world
echo Hello ; echo world
-e
paramは、すべての* nixのOS上に存在しない
echo $'hello\nworld'
プリント
hello
world
$''
文字列はANSI C引用を使用します:
フォームの単語は特別に扱われます。単語はstringに展開され、バックスラッシュでエスケープされた文字はANSI C規格の指定に従って置き換えられます。
$'string'
いつでもできますecho ""
。
例えば
echo "Hello"
echo ""
echo "World"
echo ""
私にとってはうまくいき、これが質問に直接答えられなくても、新しい行を印刷するのが最も簡単なフォームだと思います。乾杯。
echo -en "\n"
。
echo
空の行を取得するのに十分です
誰かが壁に頭をぶつけて同僚のスクリプトが改行を印刷しない理由を理解しようとしていることに気づいたときは、これに注意してください->
#!/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;
エコーに関する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
混乱を招く可能性があります。
入力するだけ
echo
新しいラインを取得する
str='hello\nworld'
$ echo | sed "i$str"
hello
world
あなたも行うことができます:
echo "hello
world"
これは、スクリプト内でもコマンドラインからでも機能します。
コマンドラインでShift+ Enterを押して、文字列内で改行します。
これは私のmacOSとUbuntu 18.04で動作します
これらのソリューションで機能せず、関数から戻り値を取得する必要があるユーザーのために、もう1つのエントリがあります。
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 "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"
ジャンプを挿入したい場所でEnterキーを押すだけです。出力は次のとおりです。
WARNING : 2 WARNINGS FOUND:
Warning, found the following local orphaned signature file:
中かっこでエコーを使用することもできます。
$ (echo hello; echo world)
hello
world
echo hello; echo world
時々、スペースで区切られた複数の文字列を渡すことができ、それはとして解釈され\n
ます。
たとえば、複数行の通知にシェルスクリプトを使用する場合:
#!/bin/bash
notify-send 'notification success' 'another line' 'time now '`date +"%s"`
\n
。これはプログラムへの個別の引数として解釈され、プログラム自体がその引数を新しい行に表示する場合がありますが、それは\n
いつでも変換され、プログラムに完全に依存しているという意味ではありません。
これは私をそこに連れて行った....
outstuff=RESOURCE_GROUP=[$RESOURCE_GROUP]\\nAKS_CLUSTER_NAME=[$AKS_CLUSTER_NAME]\\nREGION_NAME=[$REGION_NAME]\\nVERSION=[$VERSION]\\nSUBNET-ID=[$SUBNET_ID]
printf $outstuff
収量:
RESOURCE_GROUP=[akswork-rg]
AKS_CLUSTER_NAME=[aksworkshop-804]
REGION_NAME=[eastus]
VERSION=[1.16.7]
SUBNET-ID=[/subscriptions/{subidhere}/resourceGroups/makeakswork-rg/providers/Microsoft.Network/virtualNetworks/aks-vnet/subnets/aks-subnet]