Вы могли изменить первый файл на:
s/username/joe/
s/password/secret/
s/database/c2duo_db/g
сохраните его как db.sed и назовите его с
sed -f db.sed mysqlbackup.sh > joeSqlbackup.sh
Для различных пользователей/паролей и баз данных Вы генерировали бы различные sed-сценарии.
Текст между обратными галочками выполняется и заменяется выводом команды (минус запаздывающие символы новой строки, и остерегайтесь той оболочки, поведения варьируются, когда существуют символы NUL в выводе). Это называют заменой команды, потому что ею заменяют с выводом команды. Таким образом, если Вы хотите распечатать 5, Вы не можете использовать обратные галочки, можно использовать кавычки, как echo "$b"
или просто отбросьте любую цитату и использование echo $b
.
Как Вы видите с тех пор $b
содержит 5, при использовании обратных галочек bash
пробует к команде выполнения 5
и с тех пор нет такой команды, это перестало работать с сообщением об ошибке.
Чтобы понять как работы обратных галочек, попытайтесь выполнить это:
$ A=`cat /etc/passwd | head -n1`
$ echo "$A"
cat /etc/passwd |head -n1
должен распечатать первую строку /etc/passwd
файл. Но так как мы используем обратные галочки, это не печатает это на консоли. Вместо этого это хранится в A
переменная. Можно отозваться эхом $A
к этому. Обратите внимание, что более эффективный способ распечатать первую строку использует команду head -n1 /etc/passwd
но я хотел указать, что выражение в обратных галочках не должно быть простым.
Таким образом, если первая строка/etc/passwd root:x:0:0:root:/root:/bin/bash
, первой командой динамично заменит удар на A="root:x:0:0:root:/root:/bin/bash"
.
Обратите внимание, что этот синтаксис имеет Оболочку Bourne. Заключение в кавычки и выход становятся быстро кошмаром с ним особенно при запуске вложения их. Ksh, представленный $(...)
альтернатива, которая теперь стандартизируется (POSIX) и поддерживается всеми оболочками (даже Оболочка Bourne от Unix v9). Таким образом, необходимо использовать $(...)
вместо этого в наше время, если Вы не должны быть портативными к очень старым Оболочкам Bourne.
Также обратите внимание что вывод `...`
и $(...)
подвергаются разделению слова и поколению имени файла точно так же, как переменное расширение (в zsh, слово, разделяющее только), так должен был бы обычно заключаться в кавычки в контекстах списка.
Обратная галочка делает точно, что Вы говорите, что она делает. Вы установили переменную на целое число. При помещении той переменной в обратных галочках удар попытается выполнить ее как команду. Так как это не команда, Вы получаете ошибку, которую Вы видели.
То, что Вы хотите сделать, просто:
$ b=5; echo $b
Для понимания обратных галочек лучше сравните:
$ b=5; a=`echo $b`; echo $a
5
При движении шаг за шагом строка должна объяснить это.
$ b=5; echo `$b`;
b
к 5$b
(эффективно выполнения 5
)echo
es вывод оценки выше.Таким образом да, вывод, который Вы получили, ожидается. Вы оцениваете содержание переменной, не фактическая команда Вы думали, что были. Все Вы вставляете обратные галочки, просто оценено (runned) в новом (sub) оболочка.
you can use quotation marks, like echo "$b"
=> делает, "" делают что-либо специальное? Это кажетсяecho $b
работал бы точно также. – Tootsie Rolls 08.07.2013, 01:01echo
команда не заботится о количестве аргументов, которые это получает так еслиb
имеет некоторые пробелы внутри, это получит несколько аргументов и все еще распечатает их. Это может не иметь место для других команд (особенно, когда переменная не установлена), таким образом, я склонен всегда окружать переменные кавычками. – Krzysztof Adamski 08.07.2013, 09:59(POSIX)
была бы ссылка на фактический стандарт. поблагодарите Вас – erikbwork 22.05.2015, 14:38