web-dev-qa-db-ja.com

バックスラッシュに続いてprintfで改行を印刷するにはどうすればよいですか?

Pythonを使用すると、

$ python3 -c 'print("\\\n")'
\

$ 

つまり、1つのバックスラッシュと1つの改行に続いて、インタープリターによって追加の改行が挿入されます。

Cを使用してコードをコンパイルする

#include <stdio.h>

int main(void)
{
    printf("\\\n");
    return 0;
}

ファイルにbackslash.outが生成されます

$ ./backslash.out 
\
$ 

つまり、1つのバックスラッシュと1つの改行です。

バッシュでは、私は得る

$ STRING="\\\n"
$ printf "${STRING}"
\n$ 

ここでbash printfコマンドは正確に何をしますか?エスケープ文字\に関して、python printまたはC printfコマンドとはどう違うのですか?そして、私の端末で次の出力を得るために変数STRINGに何を入れる必要がありますか:

$ printf "${STRING}"
\
$ 
2
Jonas Dahlbæk

以下のスニペットでは、バックスラッシュエスケープの前後に「二重引用符」を使用しています。

$ STRING="\\\n"
$ printf "${STRING}"
\n$ 

ただし、Bashは依然として二重引用符内の一部のバックスラッシュエスケープを評価するため、\\n"\\"と評価されるため、その後の変数の内容は実際には\になります。

シェルがバックスラッシュに触れないように、文字列を「単一引用符」で囲みます。

$ STRING='\\\n'
$ printf "$STRING"
\
$ 
3
Byte Commander