Как распечатать обратную косую черту с последующей печатью printf?

Используя Python, я получаю

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

То есть, одна обратная косая черта и одна новая строка, за которой следует добавленная новая строка, вставленная интерпретатором.

Использование C, компиляция кода

#include <stdio.h> int main(void) { printf("\\\n"); return 0; }

в файл backslash.out дает

$ ./backslash.out \ $

То есть один обратный слэш и одна новая строка.

В bash я получаю

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

Что именно делает команда bash printf? Что он делает иначе, чем команды python print или C printf относительно escape-символа \? И что мне нужно будет поместить в переменную STRING, чтобы получить следующий вывод на моем терминале:

$ printf "${STRING}" \ $
1
задан 23 January 2018 в 19:39

3 ответа

В приведенном ниже фрагменте вы используете «двойные кавычки» вокруг escape-кодов обратной косой черты:

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

Однако Bash все еще оценивает некоторые обратные слэши-экраны внутри двойных кавычек, поэтому содержимое вашей переменной после этого на самом деле \\n, поскольку "\\" оценивает значение \.

Поместите строку в «одиночные кавычки», чтобы оболочка не коснулась любой из обратных косых черт:

$ STRING='\\\n'
$ printf "$STRING"
\
$ 
2
ответ дан 22 May 2018 в 15:21
  • 1
    Альтернативно: с двойными кавычками поставьте STRING="\\\\\\n". – Jonas Dahlbæk 25 January 2018 в 23:22

В приведенном ниже фрагменте вы используете «двойные кавычки» вокруг escape-кодов обратной косой черты:

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

Однако Bash все еще оценивает некоторые обратные слэши-экраны внутри двойных кавычек, поэтому содержимое вашей переменной после этого на самом деле \\n, поскольку "\\" оценивает значение \.

Поместите строку в «одиночные кавычки», чтобы оболочка не коснулась любой из обратных косых черт:

$ STRING='\\\n' $ printf "$STRING" \ $
2
ответ дан 17 July 2018 в 22:23

В приведенном ниже фрагменте вы используете «двойные кавычки» вокруг escape-кодов обратной косой черты:

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

Однако Bash все еще оценивает некоторые обратные слэши-экраны внутри двойных кавычек, поэтому содержимое вашей переменной после этого на самом деле \\n, поскольку "\\" оценивает значение \.

Поместите строку в «одиночные кавычки», чтобы оболочка не коснулась любой из обратных косых черт:

$ STRING='\\\n' $ printf "$STRING" \ $
2
ответ дан 23 July 2018 в 23:01

Другие вопросы по тегам:

Похожие вопросы: