UNIXシェルスクリプト第9章 Part9
応答要求メッセージを出力する関数 Prompt.sh
echo "${@-> }\c"
echo -n "${@-> }"
${@-> } という部分は $@ と ${variable:-value} , ${variable-value} の組み合わせ。
応答要求のスタイルを定型化した関数 Question.sh
if [ $# -lt 3 ] ; then
-lt は Less than ( < ) と同じ意味。
+x | -x ) set $ANSWER ;;
シェルはsetコマンドでオプションを切り替えられる。
-xオプションは「実行された内容を変数などを置換した状態で表示する」ためのもの。
つまりこれ以後、デバッグモードとしてシェルスクリプトが動作する。
+xを入力するとデバッグモードをオフにする。
!* ) eval `expr "$ANSWER" : "!\(.*\)'`
expr string : regex はマッチする文字列を返し、マッチしなかった場合は0を返す。
正規表現の一部が \( と )\ の間に囲まれる場合、その囲まれる文字列を返し、
マッチしなければヌル文字列を返す。
evalコマンドは変数や特殊文字の変換処理を行ってからコマンドとして実行する。