Разница между & ldquo; & Rdquo; и '' в Баш

Я пытаюсь выяснить, в чем разница между «» и «».

Когда я использую их с echo, они оба дают один и тот же результат,

sps@sps-Inspiron-N5110:~$ echo Hello    world
Hello world
sps@sps-Inspiron-N5110:~$ echo "Hello   world"
Hello   world
sps@sps-Inspiron-N5110:~$ echo 'Hello   world'
Hello   world
sps@sps-Inspiron-N5110:~$ 

. Есть ли какая-то конкретная ситуация, когда нам нужно использовать одну или другую?

Спасибо.

3
задан 5 April 2015 в 04:21

2 ответа

В ударе (интерактивная оболочка Ubuntu по умолчанию), все после открытой одинарной кавычки (') заключается в кавычки буквально, вплоть до следующего ' который взят в качестве заключительной кавычки. Напротив, несколько видов расширений оболочки выполняются в двойных кавычках (").

  • Расширение параметра$... или ${...}):

    ek@Io:~$ echo '$HOME ${USER^^*} ${SHELL%%+([[:alnum:]])}'
    $HOME ${USER^^*} ${SHELL%%+([[:alnum:]])}
    ek@Io:~$ echo "$HOME ${USER^^*} ${SHELL%%+([[:alnum:]])}"
    /home/ek EK /bin/
    

    Это - случай общего использования для " кавычки в сценариях оболочки. В частности, Вы, возможно, видели циклы, которые выполняют итерации через имена файлов, разворачивая переменную в двойных кавычках, таким образом, это становится расширенным, но не разделяло ее значение на отдельные слова. Например, команда как это могла бы помочь мне отслеживать вещи при подготовке большого количества медиа-файлов для перемещения:

    ek@Io:~$ for d in to\ *; do ls -ld "$d"; du -sh "$d"; done
    drwxr-x--- 856 ek ek 32768 Mar 29 10:47 to Albums (partial)
    308G    to Albums (partial)
    drwxrwxr-x 1191 ek ek 40960 Mar 11 12:56 to Books
    21G to Books
    
  • Замена команды$(...) или `...`) и арифметическое расширение$((...))):

    ek@Io:~$ echo '$(date)      `uname -r`      $((2+2))'
    $(date)      `uname -r`      $((2+2))
    ek@Io:~$ echo "$(date)      `uname -r`      $((2+2))"
    Sat Apr  4 20:42:37 EDT 2015      3.19.0-11-generic      4
    
  • Выход из отдельных символов с \ поддерживается и может быть удобным в " кавычки, но не поддерживается (и обычно было бы бессмысленно) в более простом ' кавычки:

    ek@Io:~$ echo '$HOME \$HOME \\\\'
    $HOME \$HOME \\\\
    ek@Io:~$ echo "$HOME \$HOME \\\\"
    /home/ek $HOME \\
    
  • Расширение истории с ! (если включено, который это обычно - при использовании оболочки в интерактивном режиме):

    ek@Io:~$ # this is just a comment (but I could run a command here)
    ek@Io:~$ echo '!!'
    !!
    ek@Io:~$ # this is just another comment (but could be another command)
    ek@Io:~$ echo "!!"
    echo "# this is just another comment (but could be another command)"
    # this is just another comment (but could be another command)
    

Кроме того, одна из наиболее распространенных причин использовать двойные кавычки состоит в том, чтобы легко и интуитивно заключить в кавычки текст, содержащий одинарные кавычки (так как a ' не имеет никакого особого значения вообще, внутри " кавычки):

ek@Io:~$ echo "We'll have the dog's fleas gone soon, you'll see."
We'll have the dog's fleas gone soon, you'll see.

Наконец, хотя Вы не можете выйти из a ' внутри '- заключенный в кавычки текст, можно достигнуть того же результата путем окончания заключающий в кавычки с ', использование завершенного ' (\'), и возобновление заключения в кавычки с ':

ek@Io:~$ echo '"My $PATH ain'\''t what it used to be," said the stevedore'\''s apprentice.'
"My $PATH ain't what it used to be," said the stevedore's apprentice.
5
ответ дан 5 April 2015 в 04:21

ссылка stackoverflow, отправленная выше bodhi.zazen, отвечает на этот вопрос.

Ниже один situtation, где это имеет значение.

sps@sps-Inspiron-N5110:~$ echo "Hello, I have only $((3+5)) $ in my account"
Hello, I have only 8 $ in my account
sps@sps-Inspiron-N5110:~$ echo 'Hello, I have only $((3+5)) $ in my account'
Hello, I have only $((3+5)) $ in my account
sps@sps-Inspiron-N5110:~$ 

Регистрация этого ответа, только чтобы позволить другим знать, что у меня уже есть ответ. (Я отправил этот вопрос.)

Спасибо.

0
ответ дан 5 April 2015 в 04:21

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

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