Как я могу сократить, если затем еще использовать формат

Я хочу сократить это до одного лайнера:

if ls --version 2>/dev/null | grep -q 'coreutils'; then alias ls='ls --color=always' else alias ls='ls -G' fi 

Я часто использую [] для условных [ -z(or -n) condition] , например, условие [ -z(or -n) condition] но еще не пришлось делать какую-либо часть в этом формате.

В рубине я бы сделал condition ? true : false condition ? true : false Есть ли эквивалент в bash?

Я пытался

 [ -z ls --version 2>/dev/null | grep -q 'coreutils'] ? alias ls='ls --color=always' : alias ls='ls -G' 

но, очевидно, это неправильный способ сделать это.

Я хочу один лайнер, потому что я хочу, чтобы весь мой .bashrc в маленьком окне (<50 строк), так что, как и в случае с другими многострочными слоями, я могу скомпоновать их в один лайнер, когда это возможно. Мне удобнее жертвовать читабельностью размера для этого примера.

Я также пробовал:

 [ -z ls --version 2>/dev/null | grep -q 'coreutils'] && alias ls='ls --color=always' || alias ls='ls -G' 

а также

 [ -n ls --version 2>/dev/null | grep -q 'coreutils'] && alias ls='ls --color=always' || alias ls='ls -G' 

а также

 [ ls --version 2>/dev/null | grep -q 'coreutils'] && alias ls='ls --color=always' || alias ls='ls -G' 

но я всегда получаю псевдоним «else», а не псевдоним «then»

Я мог бы просто отменить его, но я подозреваю, что, поскольку он не работает правильно, это не поможет. Единственный способ убедиться, хотя это попробовать его на OSX, и я сейчас на ubuntu.

2 Solutions collect form web for “Как я могу сократить, если затем еще использовать формат”

ТЛ; др;

использование

 ls --color=always > /dev/null 2>&1 && alias ls='ls --color=always' || alias ls='ls -G'` 

Детали….
[...] нужны только для оценки условных выражений (статистика файлов, сравнение строк, числовые сравнения, см. CONDITIONAL EXPRESSIONS в bash(1) ). Они также понадобятся для этого в if ... ; then ...; else if ... ; then ...; else if ... ; then ...; else построить.

Для относительно простых конструкций

 if CONDITION; then EXPR1 else EXPR2 fi 

можно заменить на

 CONDITION && EXPR1 || EXPR2 

Если вам не нужно [...] в первом случае, вам это не нужно для второго.

В вашем случае CONDITIONls --version 2>/dev/null | grep -q 'coreutils' ls --version 2>/dev/null | grep -q 'coreutils' , то есть код возврата grep . Так что вы можете просто написать

 ls --version 2>/dev/null | grep -q 'coreutils' && alias ls='ls --color=always' || alias ls='ls -G' 

BTW: Было бы проще проверить, поддерживает ли ls --color напрямую:

 ls --color=always > /dev/null 2>&1 && alias ls='ls --color=always' || alias ls='ls -G' 

С помощью zsh его можно сжать до:

 if {ls --version|&grep -q coreutils} {alias ls='ls --color=always' } else {alias ls='ls -G'} 

cmd1 && cmd2 || cmd3 cmd1 && cmd2 || cmd3 в качестве замены для if / then / else, как правило, следует избегать, поскольку это совсем не то же самое.

В

 cmd1 && cmd2 || cmd3` 

cmd2 выполняется, если cmd1 возвращает true . И cmd3 выполняется, если какой-либо из cmd1 или cmd2 возвращает false.

В вашем случае cmd2 ( alias ) вряд ли вернет false, но в общем случае легко забыть о проблеме, поэтому лучше избегать этой конструкции в первую очередь.

Единственная реальная причина, по которой это может быть полезно, – это когда вы хотите написать код, который работает как в Bourne-подобных, так и в csh-подобных оболочках (или rc подобных, где это работает), где конструкция if/then/else имеет разные синтаксис.

  • = sign в конце .sock-файлов в выводе ls
  • Печать несуществующих файлов с входного канала
  • ls: Нет такой ошибки файла или каталога
  • Есть расширение оболочки, которое похоже на scm_breeze, где вывод нумеруется, и вы можете псевдонизировать файл по его номеру
  • Самый дешевый способ найти самый старый файл (рекурсивно) из каталога с большой нагрузкой
  • Отображать полное время ISO в OSF1
  • Что означает точка после бит разрешения файла?
  • Как отключить команду ls?
  • изменить цвет ls на OpenWrt
  • Различный счет для сжатого списка файлов против каталога
  • Исправить цвета LS для каталогов с разрешением 777?
  • Как отображать «доступные для человека» размеры файлов в результатах поиска?
  • Interesting Posts

    Что проверить в списке загрузок AIX?

    Запустить команду после завершения команды nice

    su -l root -c "echo $ HOME" печатает мой пользовательский дом

    Удалять последовательные строки, если шаблоны соответствуют каждой строке

    Какие преобразования данных используют параметр -data curl?

    Нужен ли нам отдельный сервер метаданных для использования pNFS?

    Что делают линии, такие как «-y» или «-r», помещенные в CLI?

    Как заставить ghostscript не стирать метаданные PDF

    Как сделать запись в NTFS доступной?

    Как остановить все единицы, принадлежащие одной и той же цели?

    (Shell Script) Переменная не проходит правильно при извлечении значения из файла?

    Извлеките список .zip-файлов в один новый каталог каждый, имя каталога, которое будет взято из имени zip-файла

    Что такое неагрессивный способ убийства процесса?

    найти поле и переместить его до конца строки

    Передача команды с аргументами скрипту

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