これはうまくいくはずです:
if [ $testv = '!' ]; then
ここにはいくつかの問題がありました:
$(...)コマンドを実行し、その出力を置き換えます。変数値を代入したいので、$varまたはを使用します${var}。
- 私はそこで何をしていたのか分かりません
#。 ${#var}$var の長さを取得しますが、それはここで必要なものではありません。
testコマンド (の[同義語) は を理解しない==ので、 (C プログラマーの場合は間違っている=ように見えますが、これは C ではなくシェルです) を使用します。
- これはスクリプトの問題ではないと思いますが、インタラクティブな入力で
"!"は期待どおりに動作しません。以前'!'は、感嘆符が履歴オプションとして解釈されないようにしていました。
[[ ]]別の方法として、の代わりに を使用することもできます。これは[ ]、それが理解できる==(そして、一般的に構文が幾分簡潔になっている) ためです。
if [[ $testv == '!' ]]; then
ところで、このスクリプトが zsh で実行されていることをタグから信頼しています。そうでない場合、構文は少し異なります (基本的なシェルには がなく[[ ]]、zsh 以外のものは、二重引用符で囲まれていない限り、$testv の値に対して不要な解析を行います)。よくわからない場合 (または移植可能にしたい場合) は、posix 準拠のシェルで動作するバージョンを次に示します。
if [ "$testv" = '!' ]; then