2017-05-30 5 views
2

オプションの後に渡される文字列を抽出しようとしています:bashのオプションの後に文字列を読み取る方法は?

例:

./install -s service1 service2 

if [ -z ${1} ] ; then 
    echo "No option provided, defaulting to (-h)elp." 
    echo 
    option="-h" 
else 
    option=$1 

fi 

引数リストから「service1 service2」を抽出したいと思います。これを達成する方法は?

+2

['getopts'](http://wiki.bash-hackers.org/howto/getopts_tutorial)を見たいと思っています。 –

+1

'[-z $ {1}]'はかなり壊れています。 '[-z" $ 1 "]'を使う - 中括弧は何も役に立たず、引用符は必須です。あなたのスクリプトが './yourscript" nonempty -o 1 = 1 "'で実行されていた場合、その値がまったく空でないにもかかわらず '[-z $ {1}]'が真を返すでしょう。スクリプトが './yourscript '*''で呼び出された場合、テストの動作は現在の作業ディレクトリに存在するファイル名に依存します。 –

+0

同様に、 '[-z $ 1]' *は動作しているように見えますが、まったく直感的ではありません: '[-z]'は '[-z $ 1]' *文字列 '' -z ''が空であるかどうかをテストし、文字列が実際には空でない場合は真理値を返します。 –

答えて

1

あなたがshiftと特殊変数[email protected]を使用することができます。

option=$1 
shift 
echo "[email protected]" 

戻り

service1 service2 

述べたように、利用可能getoptsは良い選択肢である場合。

関連する問題