Вам нужны пробелы вокруг [
и ]
.Например:
if [ -z "$answer" ]
then
$answer=$default
else
$default=$answer
fi
Причина этого в том, что [
на самом деле является встроенной командой оболочки.
[me@home]$ type [
[ is a shell builtin
[me@home]$ which [
/usr/bin/[
Если после [
пропустить пробел, имя команды будет преобразовано в несуществующее.
[me@home]$ [ -z "something" ] # OK. calling command [ with some args
[me@home]$ [-z "something" ] # fail. calling command [-z with some args
-bash: [-z: command not found
Команда [
также проверяет, чтопоследний аргумент - ]
, поэтому, если вокруг вас нет пробелов, он становится частью предыдущего аргумента, и команда [
будет выдавать жалобу:
[me@home]$ [ -z "something" ] # this runs fine becuase last arg is ]
[me@home]$ [ -z "something"] # will fail. last arg is "something"]
-bash: [: missing `]'