2017-04-16 9 views
1

シェルスクリプト(おそらくbash)では、同じタイプの引数を多く取り込んで内部の配列に追加するにはどうしたらいいですか?例は以下のようになります:シェルスクリプトで同じタイプのcli引数を多く使用しますか?

私はこの単純な問題が猫とリダイレクトだけで解決できることを認識しています。しかし、私は、どのようにbashが-f引数を3つすべて取って配列で配列することができるので、それらを使って何かできることに興味がありますか?

要件の性質上、他の引数があるため、ここには何らかの形のフラグが必要です。

pythonのような言語では、特にdocoptのようなライブラリを使うとかなり簡単です。意図したとおりに配列を指定することができます。そんなに

おかげ

答えて

6

あなたはgetopts使用することができます。

#!/bin/bash 

while getopts "f:o:" opt; do 
    case $opt in 
     f) file+=("${OPTARG}") ;; 
     o) output="${OPTARG}" ;; 
     *) exit 1 ;; 
    esac 
done 
shift $((OPTIND-1)) 

echo "List of files: \"${file[@]}\"" 
echo "Output: \"$output\"" 

をとても例えば:

$ bash test.sh -f 1 -f 2 -f three -o /dev/null 
List of files: "1 2 three" 
Output: "/dev/null" 

をので、私は、各-fフラグのすべてののoccuranceを追加してやっていますアレイfileを印刷して印刷するだけです。 -oについては、入力を変数outputに保存しています。他のものはgetoptsとexitの標準エラーになります:

$ bash test.sh -w hi 
test.sh: illegal option -- w 
$ echo $? 
1      
関連する問題