Синтаксическая ошибка в sh - встроена и работает для bash [duplicate]

На этот вопрос уже есть ответ здесь:

инициализация массивов в sh 2 ответа

Я только начал изучать bash, и у меня есть несколько прекрасно работающих скриптов из командной строки и через udev.

Однако я только что установил AT, чтобы обойти некоторые ограничения udev.

Мне понадобилось навсегда, чтобы впервые заметить, чтоAT очень очевидно об использовании sh - не баши это было причиной моегоsource Команда потерпеть неудачу. Я с тех пор заменил его на более портативный., что должно работать со всеми снарядами.

Но теперь я получаюsh syntax error когда я объявляю переменные, используя скобки, чтобы окружить исходные переменные, которые имеют двойные кавычки в них.

Я хотел бы исправить эту синтаксическую ошибку в sh"(" unexpected - и если бы кто-то мог предложитьальтернатива, которая работает как для sh, так и для bash, это было бы прекрасно. В противном случае исправление будет, по крайней мере, заставлять меня снова работать.

Вот несколько строк в рабочем скрипте bash:

#!/bin/bash
#
# inlinetest.sh
#
CONFIG_FILE=/home/pi/autostart/autostart-settings.cfg

# Check if file exists
if [ ! -f "$CONFIG_FILE" ]; then
    exit 1
else
   # process stream settings - source is only in bash
   # use . for sh and bash shell functionality (AT uses sh)
  . "$CONFIG_FILE"
fi

# Function to wrap arecord and avconv into one command
pipe_cmd() {
   sudo nohup sudo /home/pi/aplay/arecord2 -f cd -D plughw:1,0 -q | /usr/bin/avconv "$@" >/dev/null 2>&1 &
} 

stream_parameters=(-ice_name "$icecast_show" -f mp3)   
icecast_setup="icecast://$icecast_user:$icecast_password@$icecast_server:$icecast_port$icecast_mount_url"
stream_args=(-re -i - -c:a libmp3lame -ac 2 -ar 44100 -content_type audio/mpeg -loglevel quiet -b:a "$stream_bitrate" -legacy_icecast "$icecast_legacy") 

pipe_cmd "${stream_args[@]}" "${stream_parameters[@]}" "$icecast_setup"

Синтаксическая ошибка возникает в этой строке:

stream_parameters=(-ice_name "$icecast_show" -f mp3)

и, вероятно, будет делать то же самое на этом:

stream_args=(-re -i - -c:a libmp3lame -ac 2 -ar 44100 -content_type audio/mpeg -loglevel quiet -b:a "$stream_bitrate" -legacy_icecast "$icecast_legacy") 

РЕДАКТИРОВАТЬ

Это сообщение возвращается ShellCheckкогда я меняю оболочку на / bin / sh

In POSIX sh, arrays are undefined

Ответы на вопрос(1)

Ваш ответ на вопрос