![[]形式を使用して短縮する方法](https://linux33.com/image/36410/%5B%5D%E5%BD%A2%E5%BC%8F%E3%82%92%E4%BD%BF%E7%94%A8%E3%81%97%E3%81%A6%E7%9F%AD%E7%B8%AE%E3%81%99%E3%82%8B%E6%96%B9%E6%B3%95.png)
一行に減らしたいです。
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 EXPRESSIONS
)bash(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'
答え2
を使用すると、zsh
次のように圧縮できます。
if {ls --version|&grep -q coreutils} {alias ls='ls --color=always'
} else {alias ls='ls -G'}
if/then/else の代替構成はcmd1 && cmd2 || cmd3
単に同じではないため、通常は避けてください。
存在する
cmd1 && cmd2 || cmd3`
cmd2
cmd1
返されたら実行しますtrue
。次のいずれかのcmd3
条件が満たされた場合cmd1
またはcmd2
偽を返します。
あなたの場合cmd2
()がfalseを返す可能性はほとんどありませんが、alias
一般的な場合は問題を忘れやすいので、最初からその設定を避けるのが最善です。
ただ本物これが役に立つ理由は、構文が異なる構文を持つrc
Bourneおよびcsh様シェル(または同様のシェル)で動作するコードを記述したい場合です。if/then/else