私はmakefileを持っていますが、アクションの1つでは、「echo」を使用しているので、modeset.txtというテキストファイルに文字列\noslide
を書き込む必要があります。 -Eフラグはです。バックスラッシュエスケープの解釈を無効にしますエコーは、スティッキングの一部としてフラグを処理します(以下の出力を参照)。改行を解釈しないエコー
.PHONY: target all
all: target
target:
echo -E "\noslide" > modeset.txt
clean:
rm -f modeset.txt
文字列の一部として-Eを丸飲みエコーmodeset.txtファイルショーの内容:ここで
は私のメイクから剥ぎ取ら抜粋です。
-E
oslide
しかし、シェルでは、echo -eとecho -Eは期待どおりに動作するので、これを引き起こすmakefile環境は何ですか?
OS:バニラDebian 8公式ソースのみから。
一部のシステムでは(Debianは含まれています)デフォルトのシェルは、 '/ binに/であるためです'-e'をサポートせずに' echo'を実装しています。回避策は、 'SHELL =/bin/bash'を指定するか、明示的に'/bin/echo'( 'ECHO =/bin/echo'を定義すること)を使用することです –
GNU coreutilsをすべて使用するLinuxシステムでは動作しますしかし、他のシステム(BSDなど)上の '/ bin/echo'も同様に振る舞います。 – MadScientist
@MadScientistそうです、 '/ bin/echo'の動作はシステムによって異なるかもしれませんし、特定のバージョンのGNU coreutils'/bin/echo'でも環境変数 'POSIXLY_CORRECT'の設定によって挙動が変わるかもしれません。つまり、OPの質問に対する答えはエコー、エコー、エコーがあるということです。シェル( 'SHELL'変数で指定されています - デフォルトは'/bin/sh')が存在すれば組み込み、 'PATH '(うまくいけば'/bin/echo'ですが、これは他の 'echo'コマンドがあれば' PATH'のディレクトリの順序に依存するかもしれません)。 –