[Bash]マイナス始まりの引数の処理

TIPS
TIPS

シェルスクリプトで先頭がハイフン(-)の引数をオプションとして認識されないようにするには、以下の方法があります。

方法1: ダブルダッシュ(–)を使用する

スクリプト実行時に--を指定すると、それ以降の引数はオプションとして解釈されません。

./script.sh -- -404 other_args

スクリプト内では$2が-weC9gIaGxUになります。

方法2: 環境変数で渡す

MY_ARG=\"-404\" ./script.sh

スクリプト内では$MY_ARGで参照できます。

方法3: 標準入力から読み込む

echo \"-404\" | ./script.sh

または

./script.sh <<< \"-404\"

スクリプト内でreadコマンドなどで読み取ります。

方法4: ファイルから読み込む

引数をファイルに保存して渡す:

echo \"-404\" > arg.txt
./script.sh arg.txt

方法5: エスケープする(一部のシェル)

./script.sh \"-404\"
./script.sh -- -404

推奨される解決策

方法1の--を使用する方法が最も一般的で確実です。スクリプトの使用方法をドキュメントに明記しておくことをおすすめします。
実際に納品物として作成する場合は以下でないとカッコ悪い。

#!/bin/bash
# 使用方法: ./script.sh [options] -- 引数

# オプション解析
while [[ $# -gt 0 ]]; do
    case $1 in
        --)
            shift
            break
            ;;
        # 他のオプションハンドリング
        -*) 
            echo \"不明なオプション: $1\"
            exit 1
            ;;
        *)
            break
            ;;
    esac
done

# ここで$1は-404など、オプションではない引数
echo \"引数: $1\"

このようにすることで、--の前はオプション、後ろは通常の引数として明確に区別できます。

Q よくある質問 (FAQ)
Q. Bashでハイフンから始まる引数がオプションとして誤認されるのを防ぐ最も推奨される方法は何ですか?
A.
ダブルダッシュ(`--`)を使用する方法です。引数の前に`--`を配置することで、それ以降の引数はすべてオプションではなく通常の引数として安全に解釈されます。
Q. ダブルダッシュ(`--`)以外で、マイナス始まりの値をスクリプトに渡す代替策はありますか?
A.
環境変数経由で渡す方法や、標準入力(パイプやヒアドキュメント)から読み込む方法、または一時ファイルに保存して読み込ませる方法などがあります。

コメント

タイトルとURLをコピーしました