Синтаксическая ошибка в 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