Кроме того, команда set более экзотическая, чем вы думаете. Вы не используете команду set для установки переменных.
Вы знаете, что при вызове сценария оболочки с параметрами они назначаются $1, $2, $3 , ...; правильно? Ну, одна из вещей, которые выполняет команда set, - это установить $1, $2, $3, ... для текущей (интерактивной) оболочки. Так, например,
% set checkpoint="y" % echo "$checkpoint" (Nothing) % echo "Arg1 = '$1', arg2 = '$2', arg3 = '$3'" Arg1 = 'checkpoint=y', arg2 = '', arg3 = '' % set checkpoint = "y" % echo "$checkpoint" (Nothing) % echo "Arg1 = '$1', arg2 = '$2', arg3 = '$3'" Arg1 = 'checkpoint', arg2 = '=', arg3 = 'y', который вам не нужен.
И у вас другая проблема. Правильный синтаксис:
checkpoint="t"
Если вы говорите, что
$checkpoint="t"
и $checkpoint не установлены, эта команда сводится к
="t"
, которая ищет программу под названием =t (которая, вероятно, не существует). Аналогично,
$checkpoint = "t"
сводится к
= "t"
, который ищет программу под названием =. Хуже того, если $checkpoint уже установлен на "t", и вы говорите
$checkpoint="f"
, то это интерпретируется как
t="f"
, тем самым устанавливая переменную t (т. е. $t).