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