Исключение кавычек в псевдониме zsh

Следуя этому вопросу об исключении строк из текста, я хочу превратить это в псевдоним zsh следующим образом:

alias striplines=' awk " /^$/ {print \"\n\"; } /./ {printf( \" %s \",$0);}"' 

Я пытался избежать кавычек внутри скрипта awk, но я получаю эту ошибку:

 awk: (FILENAME=bspsrobustness FNR=1) fatal: division by zero attempted 

(Файл называется bspsrobustness )

Есть ли способ сделать то, что я хочу? Полагаю, я мог бы превратить это в скрипт awk, а не в псевдоним zsh, это мой лучший вариант?

2 Solutions collect form web for “Исключение кавычек в псевдониме zsh”

Вы можете использовать функцию zsh вместо псевдонима. Никаких цитат обручей, чтобы проскочить.

 striplines() { awk '... awk body "with quotes" ...' "$@" } 

Чтобы понять, что происходит, запустите

 % alias striplines='print -lr awk " /^$/ {print \"\n\"; } /./ {printf( \" %s \",$0);}"' % striplines awk /^$/ {print "\n"; } /./ {printf( " %s ",zsh);} 

Поскольку символы $ находятся в двойных кавычках (когда они расширяются после расширения псевдонима), они интерпретируются оболочкой. Чтобы получить право цитирования, проще всего определить определение алиаса в одинарных кавычках. То, что находится внутри одинарных кавычек, – это то, что будет расширяться при использовании псевдонима. Теперь, когда аргумент awk окружен двойными кавычками, ясно, что вам нужны обратные косые черты перед \"$ .

 alias striplines='print -lr awk " /^\$/ {print \"\n\"; } /./ {printf( \" %s \",\$0);}"' 

Полезная идиома для одиночной кавычки строки с одним кавычком состоит в том, что '\'' – это, в основном, способ поставить буквенную одиночную кавычку в строку с одним кавычком. Технически есть сопоставление строки с одной кавычкой, обратной косой чертой и другой строки с одной кавычкой. Сопоставляемая пустая строка '' в конце может быть удалена.

 alias striplines='print -lr awk '\'' /^$/ {print "\n"; } /./ {printf( " %s ",$0);}'\' 

После этого длинного объяснения, рекомендации: когда это слишком сложно для псевдонима, используйте функцию .

  • как различать пользовательские сервисы и системные службы в systemd?
  • Глобальный стек
  • В чем ключевое различие между конфигурацией grml zsh и конфигурацией oh-my-zsh
  • Как отключить «auto cd» в zsh с помощью oh-my-zsh
  • Что делает карет в zsh?
  • Тест на существование функции, которая может работать как на bash, так и на zsh?
  • Есть ли менее запутанный способ установки массива $ path локально внутри функции?
  • Выполнение скрипта в разрешениях zsh-файла
  • Совместимость скриптов: Сохранить $? для использования позже
  • zsh - сложное имя файла, соответствующее
  • Как перенести список завершения zsh с фиксированной строкой текста до и после?
  • Linux и Unix - лучшая ОС в мире.