単一行の場合はbash


8

bashスクリプト内の条件が単一行で記述される方法を知りたいのですが。

例えば、どうやってこれを単一行で書いて、それから次のように別のものを書くことができるでしょうか。

if [ -f "/usr/bin/wine" ]; then
    export WINEARCH=win32
fi

これは、私の.bashrcにかなりの数のエイリアスがあり、複数のシステムに同じ.bashrc(同期済み)があるためですが、各システムにすべてのエイリアスが必要なわけではありません。 私はそれらのほとんどをifステートメントの中に入れました、そして今それはすべてき​​れいに動作しています、しかしそれらはたくさんのスペースをとります、それぞれ3行プラスそれらの間の空白行

私は環境変数にもこの手法を使用します。


1
また書くことができます [ -f "/usr/bin/wine" ] && export WINEARCH=win32
glenn jackman

ううう、これはさらに良いです、ありがとうございます!
Horațiu Mlendea

1
短い方が必ずしも良いとは限らないことに注意してください。シェルの論理演算子を使って微妙な論理エラーを起こすことができます。読みやすく維持しやすいものを選択してください。
glenn jackman

回答:


14

あなたはそのように書くでしょう:

if [ -f "/usr/bin/wine" ]; then export WINEARCH=win32; fi

これも書くことができることに注意してください(@glennjackmanによって示唆されるように):

[ -f "/usr/bin/wine" ] && export WINEARCH=win32

1
それは簡単でした... :)今、私はそれを尋ねるのがちょっと面倒です。あなたに答えてくれてありがとう、それは大いに役に立ちました!
Horațiu Mlendea

2
違いが1つあります。 1.式が0のステータスで終了します。2.ファイルが存在しない場合、式は0以外のステータスで終了します。これは、タスクの成功がコマンドの終了状況に依存するデプロイメントのような自動化されたタスクでこれを使用する場合には違いがあります。
Jānis Gruzis

2

また、複合コマンドを入力するだけで、else elseコマンドを入力してEnterキーを押し、実行後に上矢印キーを押すだけで済みます。コマンドラインはもちろん最後にタイプされたコマンドを繰り返すでしょう、しかしこの場合それはあなたが必要とするようにそれをすべて一行に置きます。それはカンニング方法ですが、それは効果的です。


1
これはあなたのシェルに依存するかもしれません(そしておそらくあなたのシェルの設定にさらに依存するかもしれません)。私のコンピュータでの簡単なテストの中には、これがBashで動作していることを示しているものもあるので(+1)、Zshは前のコマンドに戻っても改行を保存します。
8bittree
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.