[]形式を使用して短縮する方法

[]形式を使用して短縮する方法

一行に減らしたいです。

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]ますが、この形式で別の部分を実行したことはありません。

Rubyではこれを行います。condition ? true : false Bashにも同等のものはありますか?

頑張った

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

しかし、明らかにこれは正しいアプローチではありません。

私はすべてを.bashrc小さなウィンドウ(<〜50行)に合わせたいので、1行が必要です。したがって、他の複数行の行と同様に、できるだけ1行に圧縮します。この例では、サイズが大きいため、読みやすさを犠牲にする意図があります。

私も次のことを試しました。

[ -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'

しかし、私はいつも「then」エイリアスの代わりに「else」エイリアスを取得します。

元に戻すことはできますが、うまく機能しないので役に立つかどうか疑問です。唯一の確実な方法は、OSXで試してみることです。私は今Ubuntuを使用しています。

ベストアンサー1

長すぎる博士。

使用

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

詳細...
[...]条件式のみを評価する必要があります(ファイル統計、文字列比較、数値比較、参照CONDITIONAL EXPRESSIONSbash(1)。彼らはまた建設に必要ですif ... ; then ...; else

比較的単純な構造の場合

if CONDITION; then
    EXPR1
else
    EXPR2
fi

に取り替えることができる

CONDITION && EXPR1 || EXPR2

最初の場合に必要でない限り、[...]2番目の場合には必要ありません。

あなたの場合、CONDITIONこれは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'

ls注:サポートされていることを直接確認する方が簡単です--color

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

おすすめ記事