Выход из кавычек в псевдониме zsh

Они должны сделать то, в чем Вы нуждаетесь:

cmd1 && cmd2 && echo success || echo epic fail

или

if cmd1 && cmd2; then
    echo success
else
    echo epic fail
fi
12
13.04.2017, 15:36
2 ответа

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

striplines() {
    awk '... awk body "with quotes" ...' "$@"
}
9
27.01.2020, 19:56
  • 1
    И затем как был бы я называть его: striplines filename? –  Seamus 24.02.2011, 17:03
  • 2
    мог Вы объяснять что "$@" делает? –  Seamus 24.02.2011, 17:10
  • 3
    @Seamus, да Вы назвали бы его точно как этот. "$@" синтаксис отправляет полосковые аргументы awk, без помех - необходимый, если, скажем, какие-либо из Ваших имен файлов содержат пробелы: striplines "file 1" "file 2" был бы отправленный два имен файлов в awk. –  glenn jackman 24.02.2011, 17:35

Понять то, что продолжается, выполненный

% 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);}'\'

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

5
27.01.2020, 19:56

Теги

Похожие вопросы