シェルスクリプトから使える config ファイルの作り方


`command -p1 <param1> -p2 <param2> ...`

みたいなコマンドをデーモンでいくつか動かしたいのですが  
**パラメータを１つの設定ファイルで管理する方法** はないでしょうか？

今は

[code]

    #!/bin/bash
    PARAM1=abc
    PARAM2=123
    command -p1 $PARAM1 -p2 $PARAM2
    
[/code]

みたいなスクリプトをいくつも用意してるのですが  
**パラメータを変更する際全部のファイルに変更が必要なので１ファイルに集約したい** です

例えば config.ini

[code]

    [option1]
    PARAM1: abc
    PARAM2: 123
    
    [option2]
    PARAM1: def
    PARAM2: 456
    
[/code]

みたいな設定ファイルと

start.sh

[code]

    #!/bin/bash
    # config.ini のラベル $1 を読み込み
    command -p1 $PARAM1 -p2 $PARAM2
    
[/code]

という共通の実行ファイルだけ用意して  
`bash start.sh option1`  
`bash start.sh option2`  
みたいにラベル名だけ渡してパラメータを変えられるようにしたいです

設定ファイルのフォーマットは ini でも yaml でも２次元 hash を扱えれば何でもいいです

とりあえず設定ファイルを json にして  
jq で .$1.PARAM1 .$1.PARAM2  
みたいに取得することを考えてますが json ってコメントアウトができないので  
もっと定番の方法があったら教えて欲しいです




bashですよね。シンプルに `source` に引数を渡したらどうでしょうか。

### start.sh

[code]

    #!/bin/bash
    
    CURRENT_DIR=$(cd "$(dirname "$0")" && pwd -P)
    source "${CURRENT_DIR:?}/config.sh" "$1"
    
    echo command -p1 "$PARAM1" -p2 "$PARAM2"
    
[/code]

### config.sh

[code]

    #!/bin/bash
    
    case $1 in
    option1)
        PARAM1=abc
        PARAM2=123
        ;;
    option2)
        PARAM1=def
        PARAM2=456
        ;;
    esac
    
[/code]

実行するとこんな感じ:

[code]

    $ bash start.sh option1
    command -p1 abc -p2 123
    
[/code]




bashですよね。シンプルに `source` に引数を渡したらどうでしょうか。

### start.sh

[code]

    #!/bin/bash
    
    CURRENT_DIR=$(cd "$(dirname "$0")" && pwd -P)
    source "${CURRENT_DIR:?}/config.sh" "$1"
    
    echo command -p1 "$PARAM1" -p2 "$PARAM2"
    
[/code]

### config.sh

[code]

    #!/bin/bash
    
    case $1 in
    option1)
        PARAM1=abc
        PARAM2=123
        ;;
    option2)
        PARAM1=def
        PARAM2=456
        ;;
    esac
    
[/code]

実行するとこんな感じ:

[code]

    $ bash start.sh option1
    command -p1 abc -p2 123
    
[/code]

