Как создать псевдоним для команды, содержащей и апострофы, и кавычки?

Как создать псевдоним для команды, содержащей и апострофы, и кавычки?

В результате моего предыдущего вопроса я решил

alias groe= ?vim -c 'normal "+p1Gdddd"' -c ':%s/\n/' -c 'normal"gVGgJy"' -c'q!'?

Я не могу найти, как заменить '?s' в моем примере, чтобы это сработало. Уже пробовал вопросительные знаки и апострофы. Буду признателен за любые идеи. Спасибо

решение1

Сделайте это функцией оболочки, чтобы можно было убрать внешние кавычки.

groe() {
  vim -c 'normal "+p1Gdddd"' -c ':%s/\n/' -c 'normal"gVGgJy"' -c'q!' "$@"
  }

Это должно вызваться vimс аргументами -c, normal "+p1Gdddd", -c, :%s/\n/, -c, normal"gVGgJy", -cq!. Функция "$@"at расширяется до параметров, которые вы передали функции, поэтому groe foo.txtдолжна работать.

решение2

«Внутри» одинарных кавычек вы можете иметь одинарную кавычку, закрыв внешнюю одинарную кавычку, затем добавить экранированную одинарную кавычку и снова открыть внешние одинарные кавычки, например:

echo 'It'\''s ugly.'

Другими словами, все 'станет '\''плюс внешние одинарные кавычки.

Ваш псевдоним будет выглядеть так:

alias groe='vim -c '\''normal "+p1Gdddd"'\'' -c '\'':%s/\n/'\'' -c '\''normal"gVGgJy"'\'' -c'\''q!'\'''

Или вы можете использовать экранирование в стиле C $'...', где вам нужно экранировать одинарные кавычки только один раз, а также экранировать символ в \n:

echo $'It\'s a newline: \\n'
alias groe=$'vim -c \'normal "+p1Gdddd"\' -c \':%s/\\n/\' -c \'normal"gVGgJy"\' -c\'q!\''

решение3

На MacOS я обнаружил, что добавление следующей строки в мой файл .bash_profileдает мне псевдоним, который настраивает мой полезный псевдоним только при последующем использовании команды logr:

alias logr="alias r='java -jar LogUtil.jar -gui'"

Я использовал двойные кавычки ""вокруг всего logrпсевдонима, который создается для всех новых оболочек, но тогда псевдоним rстановится доступным только после того, как я введу logrкоманду.

Связанный контент