Они должны сделать то, в чем Вы нуждаетесь:
cmd1 && cmd2 && echo success || echo epic fail
или
if cmd1 && cmd2; then
echo success
else
echo epic fail
fi
Вы могли использовать функцию 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);}'\'
После этого долгого объяснения, рекомендации: когда это будет слишком сложно для псевдонима, используйте функцию.
striplines filename
? – Seamus 24.02.2011, 17:03"$@"
делает? – Seamus 24.02.2011, 17:10"$@"
синтаксис отправляет полосковые аргументы awk, без помех - необходимый, если, скажем, какие-либо из Ваших имен файлов содержат пробелы:striplines "file 1" "file 2"
был бы отправленный два имен файлов в awk. – glenn jackman 24.02.2011, 17:35