Это неверный синтаксис; в книге, похоже, есть ошибка копирования-вставки или что-то в этом роде.
Чтобы пример делал то, что говорит текст, он пытается это сделать:
newarray=(;'echo "$@"')
должно быть именно таким :
newarray=("$@")
(нет ;
, нет '
, нет echo
).
Кроме того, это:
testit ${myarray[*]}
должно быть следующим:
testit "${myarray[@]}"
("
, @
вместо *
), чтобы избежать неправильной работы, когда элемент массива содержит пробел или специальные символы. (В целом, из нескольких страниц, которые я просмотрел, эта книга, похоже, не демонстрирует надежный код; поэтому даже для примеров, которые будут работать, если вы попробуете их на простых входных данных, я не рекомендую слишком доверять в них.)