Я прочитал этот раздел в книге Изучение оболочки 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 ""
Можете ли вы объяснить, что я делаю неправильно?
Я попытался сломать это немного для Вас, с помощью собственных примеров/текста также, проверить его:
$ 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
Я думаю, что необходимо поместить:
fred='Four spaces between these words'
echo "The value of \$fred is \"$fred\""
Можно ввести это в терминал путем щелчка правой кнопкой и выбора Вставки или Ctrl+Shift+V), или путем ввода его одна строка за один раз. например:
Можно также создать сценарий с этим в - выполненный 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
Это должно привести к:
Примечания:
$
и имя переменной (например. $varname
нет $ varname
)\
символ говорит оболочке рассматривать следующий символ как обычный символ. В этом случае необходимо выйти из кавычек вокруг переменной, таким образом, они появляются в выводе и первой переменной, таким образом, это появляется как $fred
нет Four spaces between these words
.Это могло бы также работать так, Вы не должны выходить из кавычек, но необходимо было бы все еще выйти из переменной:
echo "The value of \$fred is '$fred'".