Исключение кавычек в псевдониме 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);}'\' 

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

  • Как я могу сделать свою тему Zsh («fade») хорошо выглядеть в urxvt?
  • Как вы можете получить текущую терминальную строку (ту, которая все еще доступна для редактирования пользователем)?
  • Измерьте время выполнения команды, включая расширение подстановки команд
  • Вернитесь к пути, когда возобновите работу с фона
  • Как написать сценарий оболочки для запуска нескольких команд в разных сеансах экрана?
  • Zsh: автоматическое изменение выполняемой команды
  • Иногда мой zsh испортил конец строк
  • Как сохранить распечатку последней команды в переменной оболочки в urxvt / zsh?
  • Увеличение / уменьшение числа в файле из (zsh) скрипта
  • Что делает это решение zsh для «списка аргументов слишком длинным»?
  • Отключить завершение имени файла подстроки в zsh
  • Interesting Posts

    Я могу использовать SSH и HTTP, но не пинг или доступ к определенным службам UDP через локальную сеть

    Что такое алгоритм, который использует команда `iw` для выбора точки доступа для данной сети Wi-Fi?

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

    Два корневых аккаунта, что делать?

    Проблема с разрешением Symlink для Linux + ZFS

    Перенаправление программного вывода

    Нумерованное музыкальное нотное письменное программное обеспечение

    Удаленное выполнение команд, но все же контроль над хостом

    Как получить строку между двумя специальными символами с помощью Shell?

    Как использовать внешний аппаратный RNG во FreeBSD?

    Почему crontab не хранится в домашних каталогах пользователей?

    cmdline Unix Калькулятор разрешений битов

    Сценарий, выполняемый отлично от разрывов файлов при выполнении с помощью Heredoc (в установке PHPmyadmin)

    Скрипты тестирования

    Можно ли использовать несколько слоев LVM с помощью mdraid

    Linux и Unix - лучшая ОС в мире.