Вы получите «слишком много аргументов», если переменные содержат пробелы, что приведет к тому, что расширения без кавычек будут разбиты на несколько слов. Так что, действительно, вы должны заключать в кавычки все переменные в [.. ]
, чтобы предотвратить это.
Второй if
, который вы написали (if [ "$inputstring" = "$INPUT" ]
), верен и будет запускать основную ветвь if
, если две переменные действительно содержат одни и те же данные. Но в зависимости от того, откуда они берутся, у вас могут быть лишние пробелы внутри них или что-то еще, что трудно увидеть. Используйте, например. printf "<%q>\n" "$INPUT"
, чтобы увидеть содержимое переменной в однозначном формате. (Выходной формат зависит от значения переменной, но обычно оно печатается в кавычках и/или показывает специальные символы с обратной косой чертой -.)
Например, здесь переменные не содержат одни и те же данные, последние имеют пробел в конце:
$ foo=123
$ bar="123 "
$ echo $foo $bar
123 123
$ if [ "$foo" = "$bar" ]; then echo same; else echo not same; fi
not same
$ printf "<%q>\n" "$foo" "$bar"
<123>
<123\ >