文字列が数字で終わっていることを確認すると、「予期しない演算子」が発生します。

文字列が数字で終わっていることを確認すると、「予期しない演算子」が発生します。

実行中のスクリプトのファイル名が数字で終わっていることを確認しようとしています。

#!/bin/sh
name=$(basename "$0" .sh)
[ $name =~ ^.[0-9]$ ] && numb=$(echo $name | sed 's/[^0-9]*//g') || numb=1
echo $numb

私のシェルファイルの名前は次mh03.shのとおりです。実行時の出力は次のとおりです。

$ ./mh3.sh
./mh3.sh: 3: [: mh3: unexpected operator
1

誰かがこの例外が発生する理由と回避策を教えてもらえますか?

答え1

=~単一の括弧内では、正規表現一致演算子はサポートされません。機能するには二重角かっこが必要です。

[[ $name =~ ^.[0-9]$ ]]

正規表現は不要で、通常モードを使用できます。

[[ $name = *[0-9] ]]

または、名前の前に数字の前に内容を含める必要がある場合

[[ $name = *?[0-9] ]]

答え2

[:=~: 二項演算子が必要です。

エラーは[$name =~ ^.[0-9]$ ] []内にあります。

努力する、

#!/bin/sh
name=$(basename "$0" .sh)
[[ $name =~ ^.[0-9]$ ]] && numb=$(echo $name | sed 's/[^0-9]*//g') || numb=1
echo $num

効果がある

関連情報