Когда использовать одинарные или двойные кавычки в командной строке Ubuntu? [дубликат]

Есть ли простое правило, чтобы понять, когда использовать кавычки в командной строке Ubuntu, а когда одинарные кавычки и когда нужны двойные кавычки?

Например, как объяснить разницу здесь:

$ echo $'a\naa\nac\nb\ncc\tdd\ne\se'
a
aa
ac
b
cc  dd
e\se
$

и

$ echo $"a\naa\nac\nb\ncc\tdd\ne\se"
a\naa\nac\nb\ncc\tdd\ne\se
$
3
задан 11 March 2014 в 09:51

4 ответа

В Вашем случае существует специальный используемый синтаксис заключения в кавычки, а именно, $'...' и $"...". Похоже, что этот синтаксис прибыл от оболочки Korn до Zsh и Bash, и находится теперь в POSIX (см., например, "разворачивают последовательности" строка в http://mywiki.wooledge.org/Bashism). Этот синтаксис не упоминается в ответах на Различия между doublequotes "", singlequotes '' и обратными галочками ´´ на командной строке?.

Детали об этом синтаксисе могут быть найдены в ударе (1) страница справочника:

   Words of the form $'string' are treated specially.  The word 
   expands to string, with backslash-escaped characters replaced as specified 
   by the  ANSI C standard.  Backslash escape sequences, if present, are 
   decoded as follows:
              \a     alert (bell)
              \b     backspace
              \e
              \E     an escape character
              \f     form feed
              \n     new line
              \r     carriage return
              \t     horizontal tab
              \v     vertical tab
              \\     backslash
              \'     single quote
              \"     double quote
              \nnn   the eight-bit character whose value is the octal value 
                     nnn (one to three digits)
              \xHH   the eight-bit character whose value is the hexadecimal 
                     value HH (one or two hex digits)
              \uHHHH the Unicode (ISO/IEC 10646) character whose value is 
                     the hexadecimal value HHHH (one to four hex digits)
              \UHHHHHHHH
                     the Unicode (ISO/IEC 10646) character whose value is the 
                     hexadecimal value HHHHHHHH (one to eight hex digits)
              \cx    a control-x character

       The expanded result is single-quoted, as if the dollar sign had not
       been present.

       A double-quoted string preceded by a dollar sign ($"string") will
       cause the string to be translated according to the current locale.  If 
       the current locale is C or POSIX, the dollar sign is ignored.  If the
       string is translated and replaced, the replacement is double-quoted.

Это также означает, что переменная будет расширена в $"...", но не в $'...'. Сравните:

$ echo 'I am using\t$SHELL.\n'
I am using\t$SHELL.\n
$ echo $'I am using\t$SHELL.\n'
I am using  $SHELL.

$ echo "I am using\t$SHELL.\n"
I am using\t/bin/bash.\n
$ echo $"I am using\t$SHELL.\n"
I am using\t/bin/bash.\n

В первом примере, ни один $SHELL переменная, ни Escape обратной косой черты расширены. Во втором примере примеры обратной косой черты расширены, но не переменная. Третьи и четвертые примеры дают идентичные результаты: Только переменная расширена.

Форма $'...' может быть полезным для присвоения содержания с метасимволами как \t или \n к переменным. Я не мог найти применение для формы $"...",все же.

2
ответ дан 1 December 2019 в 15:26

Обычно, двойные кавычки (" ") используются для печати, значение любых переменных и одинарных кавычек используется для печати точной строки.

, Например, у Вас есть переменная foo, который содержит pwd как значение.

foo=pwd

теперь, когда Вы делаете эхо:-

  • "$foo" - это распечатает значение переменного нечто, т.е. pwd
  • повторяют '$foo' - это распечатает $foo (точная строка передала в одинарных кавычках кроме того, Одинарные левые кавычки используются в командной строке / сценарии оболочки, которые обычно используются для выполнения команды, сохраненной в переменной.
  • echo `$foo ` распечатает Ваш текущий каталог, т.е. вывод pwd команда.
2
ответ дан 17 November 2019 в 19:44

Проверьте принятый ответ в Различия между doublequotes " " singlequotes ' ' и обратные галочки ´ ´ на командной строке?

, Например, цель, полагайте, что переменное нечто содержит uname.

echo "$foo" outputs uname, subtitute variables in text.
echo '$foo' outputs $foo, the exact string (only ' should be escaped \').
echo `$foo` outputs Linux, execute the content of the variable and echo outputs it.

Вот также немного хорошие Руководства Командной строки

1
ответ дан 17 November 2019 в 19:44
$ echo $'a\naa\nac\nb\ncc\tdd\ne\se'
a
aa
ac
b
cc  dd
e\se
$

В вышеупомянутом примере, \n представляет новую строку. Для этого Синтаксиса $'code\ncode1', терминал сначала печатает code на первой строке и на следующей строке, это печатает code1.

Таким образом в примере, терминал сначала начинает, выполняет code.prints a на 1-й строке затем это перемещается в следующий символ. Следующий символ \n который представляет новую строку. Таким образом, это печатает aa в новой строке. И интерпретатор удара выполняется как этот. При наблюдении этого кода cc\tdd, это печатает cc и после некоторого пространства, это печатает dd.Because \t представляет tab.Next это печатает e\se asusual, потому что нет никакого значения для \s.

$ echo $"a\naa\nac\nb\ncc\tdd\ne\se"
a\naa\nac\nb\ncc\tdd\ne\se
$

echo $"text".In это команда эха отображает любой данный внутри $"" как он как. Это не проанализирует.

echo $'code' - Это анализирует код.

echo $"code" - Если код содержит долларовую переменную, он должен быть расширен иначе, он не будет для \n \t и печатает все другое содержание как есть.

1
ответ дан 1 December 2019 в 15:26

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

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