2015-03-06 2 views
0

Я пытался организовать доморощенные пакеты с Баш псевдоним:является var ++ = 0 допустимым выражением в bash?

alias brewUses='brew list | while read cask; do let var=var+1 && echo -en "$var\033[1m $cask \033[0m \033[34mUSED BY : \033[0m"; brew uses --installed $cask | awk '"'"'{printf " \033[4m%s\033[0m ", $0}'"'"'; echo ""; done'

это окончательный вариант моей линии - без ошибок, выход образца:

enter image description here

Что я хочу запросите:

  1. is var++ = 0 не работает в bash?
  2. есть ли лучший способ генерировать число перед каждой строкой? Такие, как-то скрыто от brew list | while read cask, а не жесткий -кода let var=var+1
  3. что точная причина, что есть ошибка -bash: syntax error near unexpected token `(' каждый раз, когда я использую ((...)) в строке

Edit:

Отрывок кредит: MH Nichols

+0

Что как вы думаете, 'var ++ = 0'? –

+0

Мой плохой. Некоторая часть моей памяти размытия сказала мне, что это сокращение от var = 0; var ++ '. Возможно, я ошибаюсь, спасибо. –

+2

@JustinMoh: Сокращение для 'var = 0; ((var ++)) 'is' var = 1' – rici

ответ

1

Вы можете использовать счетчик, конечно. x++ работает только в арифметическом контексте.

line=0 
brew list | while read -r cask; do 
    ((line++)) 
    … 
done 

Или вы могли бы

brew list | cat -n | while read line cask; do 
    … 
done 

(Кстати, функция оболочки была бы гораздо более ремонтопригодны, чем псевдоним здесь Вот как я бы написать.):

brewUses() { 
    local line cask uses 
    brew list | while read cask; do 
     uses=($(brew uses --installed "$cask")) 
     printf '%02d\033[1m %s \033[0m' $((++line)) "$cask" 
     if ((${#uses[@]})); then 
      printf '\033[34mUSED BY:' 
      printf '\033[0m \033[4m%s' "${uses[@]}" 
     fi 
     printf '\033[0m\n' 
    done 
} 
+0

Я согласен, что пользовательская функция оболочки лучше для некоторых более сложных, чем это. благодаря –

Смежные вопросы