2016-10-14 10 views
-1

私はこのコードを短縮してエコー$を削除する方法を探していますか?部。終了コードの拡張のためにbashに略記がありますか?

case 0 in 
    $([[ -e /path/to/file/a ]]; echo $?)) echo a ;; 
    $([[ -e /path/to/file/b ]]; echo $?)) echo b ;; 
esac 

bashには、エコー文を追加する必要なく、コマンドの終了値に拡張する必要があります。

私は30分のグーグルコマンド拡張を費やしましたが、上記の例のエコーを排除するものは見つかりませんでした。

おそらくそれは希望的な考えですが、いずれにせよ私は明確な答えを持っていたり、意見を聞いていたいと思います。

答えて

3

おそらく、私は何かが欠けているんだけど、

if [ -e /path/to/file/a ]; then 
    echo a 
elif [ -e /path/to/file/b]; then 
    echo b 
fi 

または

for f in a b; do 
    if [ -e /path/to/file/"$f" ]; then 
    echo $f 
    break 
    fi 
done 

のようなものは、より簡単な方法ではないでしょうか?

あなたはそれがあなたのコードに深くどこかではなく、スクリプトの先頭にリストを定義することができますように、私は特に第二のアプローチを好む場所の成長のリストを処理する必要がある場合:

locations=('/path/to/file/a' '/path/to/file/b') 

または

declare -a locations=() 
locations+=('/path/to/file/a') 
locations+=('/path/to/file/b') 

場所が存在しない場合にのみ適用されるようにあなたは、if文の中case文を入れ子にすることで、さまざまな方法でさまざまな場所を処理することができます:

0123を
for f in "${locations[@]}"; do 
    if [ -e "$f" ]; then 
    case "$f" in 
     '/path/to/file/b') 
     su -c "..." - someuser 
     ;; 
     *) 
     echo "$f" 
     ;; 
    esac 
    break 
    fi 
done 
+0

私は現在、私は多くの多くの可能性のあるファイルの場所を持っていたとして急速に成長しているのelif文、 – Phillmac

+0

は、だから私はまたcase文で構造を簡素化することが可能であったかどうかを確認したい場合は周りに基づいているスクリプト、エコーを持っていますaまたはecho bは必ずしも同じコマンドであるとは限りません。時には、存在するファイルに応じて異なるユーザーとして実行するsuコマンドがあります – Phillmac

関連する問題