2017-07-29 3 views
0

もっともエレガントな方法は?提供されたパラメータを取るか、または「読み込み-pプロンプト」がない場合に備えて?Bash:引数を取るか、-pプロンプトを読む

私があれば、いくつかの操作を行うことができます - しかし、私は

x=${1:-foo} 

のようないくつかの短い構文で何とかそれを組み合わせることができる場合、私は疑問に思うことはIF-より任意のより簡潔な方法はありそうでない

if [ -z "$1" ]; then 
    read -p "supply x:" x 
else 
    x="$1" 
fi 

- それとも?それとももしかすると - それ以外の方法は?

+0

引数がない場合に行う最も洗練されたことは、デフォルトを提供するか、または中止することです。それを読もうとするのは間違いです。 –

+0

私は可能なワンライナーについてもっと疑問に思っていました。読まれる代わりに、他の操作を行うことができる。いずれかのパラメータが提供され、エーテルは何らかの方法で計算されます(必ずしも読み込まれる必要はありません)。ありがとう! –

答えて

1

Iこれに対して、全体の心を込めアドバイス正しい振る舞いは、デフォルトを提供したり、エラーメッセージを表示して終了するかですが、この怪物を行う上で主張すれば、あなたが使用できるよう:

x=${1-$(read -p prompt: v; echo "$v")} 

これだけ入力の1行を使用することができますが、これはおそらく望ましい動作です。警告は全体的な動作がではないが望ましいです!これは恐ろしいことです!

+0

私は、可能なワンライナーについてもっと疑問に思っていました。読まれる代わりに、他の操作を行うことができる。いずれかのパラメータが提供され、エーテルは何らかの方法で計算されます(必ずしも読み込まれる必要はありません)。ありがとう! –

0

これはかなり簡潔です:あなたは、デフォルト値が必要な場合

[[ -n "$1" ]] && x="$1" || read -p "supply x:" x 

あなたの第二の溶液はまた、十分な「バッシー」です。

2

$#を使用して、最初の位置パラメータが設定されているかどうかを確認します。 -zを使用すると、引数として空の文字列を渡す機能を排除:

if (($# < 1)); then 
    IFS= read -rp "supply x: " x 
else 
    x=$1 
fi 

readコマンドへの追加は、任意の先頭をストライピングまたは空白文字を末尾または解釈することなく、どのようなユーザタイプは正確xからが割り当てられていることを確認します特別なバックスラッシュ。実際にはあなたが実際にが必要ですが、それは良い習慣です。

関連する問題