SUSv3は計算結果がnullか0でなければexprが0で終了すると規定している。
#! /bin/sh set -e output="-" while getopts "ho:" opt; do case "$opt" in h) printf 'Usage: %s [ -h ] [ -o FILE ] [file...]\n' "$0" exit 1 ;; o) output="$OPTARG" ;; ?) exit 1 ;; esac done shift=`expr "$OPTIND" - "1"` shift "$shift" printf '[output=%s]\n' "$output" printf '[%s]\n' "$@"
なにもオプションを指定しないと、シェルスクリプトは期待したように動作しない。shift=`expr "$OPTIND" - "1"`
は$OPTIND
が1のときに0で終了する。set -e
はコマンドが正常に終了しなかった場合にシェルスクリプトをただちに終了する。
shift=`expr "$OPTIND" - "1" || true` shift "$shift"
0 件のコメント:
コメントを投稿