Исходя из этого вопроса об удалении строк из текста, я хочу превратить это в псевдоним zsh следующим образом:
alias striplines=' awk " /^$/ {print \"\n\"; } /./ {printf( \" %s \",$0);}"'
Я пытался экранировать кавычки внутри скрипта awk, но я получаю эту ошибку:
awk: (FILENAME=bspsrobustness FNR=1) fatal: division by zero attempted
(Файл называется bspsrobustness
)
Есть ли способ сделать то, что я хочу? Я полагаю, я мог бы превратить это в сценарий awk, а не в псевдоним zsh, это мой лучший вариант?
Ответы:
Вы можете использовать функцию zsh вместо псевдонима. Нет цитирования обручи, чтобы прыгать.
источник
striplines filename
?"$@"
делает?"$@"
Синтаксис отправляет полоски аргументы AWK ненарушенного - необходимо , если, скажем, какие - либо из ваших имен файлов содержат пробела:striplines "file 1" "file 2"
будет отправлено два имени в AWK.Чтобы понять, что происходит, запустите
Поскольку
$
символы заключены в двойные кавычки (когда они раскрываются после раскрытия псевдонима), они интерпретируются оболочкой. Чтобы получить правильное цитирование, проще поместить все определение псевдонима в одинарные кавычки. Внутри одинарных кавычек есть то, что будет раскрыто при использовании псевдонима. Теперь, когда аргументawk
обернут в двойные кавычки, ясно, что вам нужно использовать обратную косую черту\"$
.Полезная идиома для одинарных кавычек в строке в одинарных кавычках заключается в том, что
'\''
это в значительной степени способ поместить буквальную одинарную кавычку в строку в одинарных кавычках. Технически существует сопоставление строки в одинарных кавычках, обратной косой черты'
и другой строки в одинарных кавычках. Сопоставленная пустая строка''
в конце может быть удалена.После этого длинного объяснения, рекомендация: когда это слишком сложно для псевдонима, используйте функцию .
источник