2016-05-29 1 views
3

位置引数$ 1に2つの数値、つまり「15-20」をダッシュ​​で追加する必要があります。 15〜20の間隔であり、の1つの位置パラメータでなければなりません。私はこれをした:1つの位置パラメータから2つの変数を作成する方法は?

#!/bin/sh 
a=$(echo "$1" | sed 's/-/ /g') 
echo $a 

それは出力します。 私は別々の変数としてこれらの番号のそれぞれを取らなければならないので、私は間隔として将来的にこれを必要とします。 a = 15 20の代わりに、a = 15、b = 20でなければなりません。これをどのように達成できますか?

+0

なぜ1つのパラメータにする必要がありますか?スクリプトを制御し、必要に応じてパラメータを再構成することができます。スクリプトの最初の行を 'set $ {@ // - /}'にし、ハイフンを含むすべてのパラメータを2つ(またはそれ以上)のパラメータに分割します。それを試してみてください! –

答えて

3

bashを使用して、あなたは、プロセス置換を使用することができます。

read a b < <(echo "$1" | sed 's/-/ /g') 

# and check values 
declare -p a b 
declare -- a="15" 
declare -- b="20" 

を@chepnerから役立つコメントとして以下の、あなたもsedは必要ありません。 readと、ここで文書を使用し、/bin/sh

IFS=- read a b <<< "$1" 
+1

'IFS = - read a b <<<" $ 1 "'は簡単です。 – chepner

+0

ああ、私たちは 'sed'(編集済み) – anubhava

4

:カスタムIFSを使用して、両方の変数を読んで使用することができます。

IFS=- read a b <<EOF 
$1 
EOF 

または、パラメータ拡張を2回使用して接頭辞/接尾辞を削除してください。

a=${1%-*} 
b=${1#*-} 
関連する問題