Я пишу простую функцию, которая печатает линии, чтобы нарисовать коробку с printf (так же, как ваше обычное рождественское назначение) в оболочке. Чтобы добиться этого, я использую два вложенных C-стиля для циклов, которые выглядят так:
# Prints $1 spaces, "$2", "$3" $4 times, "$5", and a linefeed $6 times
_titlebox_drawboxline() {
for (( i=0; i<$6; i++ ))
do
printf "%*s" $1 "$2";
for (( j=0; j<$4; j++ ))
do
printf "%s" "$3";
done;
printf "%s\n" "$5";
done
}
Однако, когда программа достигает той части, где она должна вызывать функцию, я получаю следующее:
Type a title to print: hello stackoverflow
./titlebox.sh: line 97: ((: i<: syntax error: operand expected (error token is "<")
./titlebox.sh: line 97: ((: i<: syntax error: operand expected (error token is "<")
./titlebox.sh: line 71: printf: #: invalid number
hello stackoverflow./titlebox.sh: line 73: printf: #: invalid number
./titlebox.sh: line 97: ((: i<: syntax error: operand expected (error token is "<")
./titlebox.sh: line 97: ((: i<: syntax error: operand expected (error token is "<")
Хотя строка 71 - это просто строка с надписью printf "%*s" $5 "${borders[1]}"
, я буду беспокоиться об этом позже, это строка 97, цикл j
для которого выдает ошибку.
Я вижу, что это дает мне ошибку с i
, в то время как эта строка работает только с j
.
Что я делаю не так?