Избегайте использования alias
определений для чего-либо, кроме действительно простых сочетаний клавиш, например, alias cdw="cd /home/users/foo/bar/workspace"
. Для всего, что включает в себя более чем одну командную конструкцию или аргументы, кавычки всегда предпочитают функции, а не псевдонимы
Ваш вариант функции может быть просто записан, как показано ниже. Это на 100% переносимо в любой оболочке Unix и может быть добавлено в файл запуска, ваша оболочка использует
mypr() {
enscript -jC -p output.ps -b '$n %W Page $% of $='
}
Определение псевдонима не сработало, потому что оболочке не понравился способ ваш $
персонаж обработан. Право, когда вы определяете псевдоним как ".."
, при разрешении определения псевдонима он пытается раскрыть содержимое в кавычках, как часть, для которого он выполняет расширение переменных. Таким образом, любой токен, содержащий префикс $
, перед которым раскрывается, оболочка пытается развернуть $n
и не видит значения, поэтому она сохраняет пустую строку.
Чтобы избежать этого, вы должны иметь либо вы определили свой псевдоним внутри одинарных кавычек '..'
, либо экранировали все токены $
, чтобы они не разрешались во время определения. Поскольку $%
и $=
не являются какой-либо специальной переменной оболочки или пользовательскими переменными, они не раскрываются и обрабатываются буквально.
Итак, на нашем первом этапе экранирования мы добавляем одну escape () на $n
и определите его следующим образом:
alias mypr="enscript -jC -p output.ps -b '\$n %W Page $% of $='"
Вы сразу увидите, что теперь вы сохранили $n
, но потеряли внешние кавычки '..'
как часть удаления цитаты, так что вы теперь вам нужно избегать этого
alias mypr="enscript -jC -p output.ps -b \'\$n %W Page $% of $=\'"
При вызове псевдонима вы обнаружите, что даже вышеперечисленное не работает, поскольку оболочке все еще удалось развернуть $n
. Так что вам нужно будет ввести еще один уровень побега и побега.
alias mypr="enscript -jC -p output.ps -b \'\\\$n %W Page $% of $=\'"