Можете ли вы помочь мне понять это объяснение цитирования оболочки?

Я пытаюсь понять и воспроизвести это

Я прочитал этот раздел в книге Изучение оболочки Bash ;
Мой вопрос об этом ниже:

«Обратите внимание, что в этих примерах эха мы использовали двойные кавычки вокруг переменных (и содержащих их строк). В главе 1 мы говорили, что некоторые специальные символы внутри двойных кавычек по-прежнему интерпретируются, хотя ни одна из них не интерпретируется внутри одинарных кавычек.

Специальный символ, который «выживает» в двойных кавычках, - это знак доллара, означающий, что переменные оцениваются. В некоторых случаях можно обойтись без двойных кавычек, например, мы могли бы написать Приведенная выше команда echo выглядит следующим образом:

$ echo The value of \$ varname is \"$ varname \".

Но двойные кавычки в целом правильнее. Вот почему. Предположим, мы сделали это:

$ fred='Four spaces between these words.'

Тогда, если мы введем команду # echo $ fred, результат будет:

Four spaces between these words.

Что случилось с лишними пробелами? Без двойных кавычек шелл l разбивает строку на слова после подстановки значения переменной, как это обычно происходит при обработке командных строк. Двойные кавычки обходят эту часть процесса (заставляя оболочку думать, что вся строка в кавычках - это одно слово).

Поэтому команда echo «$ fred» печатает это:

Four spaces between these    words.

Различие между одинарными и двойными кавычками становится особенно важным, когда мы начинаем работать с переменными, содержащими пользователя или файл. вход позже. "

Мой вопрос

Я пытался практиковаться с этим, но я в замешательстве. Я помещаю-

$ echo The value of \$ varname is \"$ varname \".
$ fred='Four spaces between these words.'

в файл? Как введите # nano, затем вставьте его туда? Или я просто ввожу его в терминал? Ни один из них не работает. Когда я вошел в # nano fred и поместил его в этот файл, сделал его исполняемым и изменил "varname" на " Фред "и побежал. / Фред, я получил это в результате:

The value of $fred is ""


Можете ли вы объяснить, что я делаю неправильно?

2
задан 15 June 2016 в 00:23

2 ответа

Я попытался сломать это немного для Вас, с помощью собственных примеров/текста также, проверить его:

$ cat fred    
#!/bin/bash

fred='Four spaces between these    words.'

echo "The value of \$fred is $fred"

echo "The next line being printed is simply the results of # echo \$fred"

echo $fred

Выполнение сценария удара выше печатает следующее к terminal/stdout:

The value of $fred is Four spaces between these    words.
The next line being printed is simply the results of # echo $fred
Four spaces between these words.

Также, можно смотреть терминальное видео этого здесь: http://showterm.io/98f56243f60551b338b9f

3
ответ дан 15 June 2016 в 00:23

Я думаю, что необходимо поместить:

fred='Four spaces between these words'
echo "The value of \$fred is \"$fred\""

Можно ввести это в терминал путем щелчка правой кнопкой и выбора Вставки или Ctrl+Shift+V), или путем ввода его одна строка за один раз. например:
                enter image description here

Можно также создать сценарий с этим в - выполненный nano ./echofredscript и вставка в:

#!/bin/bash

#The bit above is a shebang line (look it up on wikipedia).
#These are comments and will be ignored

fred='Four spaces between these words'
echo "The value of \$fred is \"$fred\""

Можно затем сохранить его с Ctrl+O и выход с Ctrl+X, затем выполнить это для создания его исполняемым файлом:

chmod +x ./echofredscript

Затем это для запущения скрипта:

./echofredscript

Это должно привести к: enter image description here

Примечания:

  1. Никакие пробелы между $ и имя переменной (например. $varname нет $ varname)
  2. \ символ говорит оболочке рассматривать следующий символ как обычный символ. В этом случае необходимо выйти из кавычек вокруг переменной, таким образом, они появляются в выводе и первой переменной, таким образом, это появляется как $fred нет Four spaces between these words.

Это могло бы также работать так, Вы не должны выходить из кавычек, но необходимо было бы все еще выйти из переменной:

echo "The value of \$fred is '$fred'".
1
ответ дан 15 June 2016 в 00:23

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

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