シェルスクリプトで先頭がハイフン(-)の引数をオプションとして認識されないようにするには、以下の方法があります。
方法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"
このようにすることで、--の前はオプション、後ろは通常の引数として明確に区別できます。


コメント