Почему мой скрипт Bash возвращает синтаксическую ошибку?

Я пишу скрипт, который зацикливается на последние файлы в папке и выполняет команду …

#!/bin/bash cd /home/Downloads recent_files = ($(ls -t | head -20)) for file in "${recent_files[@]}" do ./cmd $file done 

Я получаю следующую синтаксическую ошибку:

 line 3: syntax error near unexpected token `(' line 3: `recent_files = ($(\ls -t | head -20))' 

5 Solutions collect form web for “Почему мой скрипт Bash возвращает синтаксическую ошибку?”

Схема назначения переменных Bash – это var=value т.е. дополнительные пробелы не допускаются.

Удаление их правильно назначит ls -t | head -20 ls -t | head -20 output в виде массива.

Таким образом, ваш скрипт должен быть:

 #!/bin/bash cd /home/Downloads recent_files=($(ls -t | head -20)) for file in "${recent_files[@]}" do ./cmd $file done 

Вам вообще не нужно хранить вывод в переменной:

 cd /home/Downloads command ls -t | head -20 | while read -r file; do ./cmd "$file" done 

или даже

 command ls -t | head -20 | xargs -L 1 ./cmd 

Более безопасный способ работать с stat . Он по-прежнему не защищает вас от имен файлов с помощью новых строк, но

 stat -c "%Y %n" * | sort -rn | head -20 | cut -d" " -f2- | xargs -L 1 ./cmd 

Чтобы быть надежным, find – возможно, нужны инструменты GNU для обработки нулевого байта

 find . "${find_options[@]}" -printf '%T@ %p\0' | sort -zrn | xargs -0 -L 1 sh -c './cmd "$(echo "$0" | sed "1s/^[0-9.]\\+ //")"' 

массив find_options может использоваться в качестве заполнителя для добавления директив фильтрации, таких как

 find_options=( -type f ) find_options+=( -maxdepth 1 ) find_options+=( -name '*.txt' ) 

и так далее

Вы должны удалить пробелы вокруг знака равенства.

 recent_files=($(ls -t | head -20)) 

Тогда это должно сработать.

Я думаю, что есть более простой ответ …

 #! / Bin / Баш
 cd / home / Загрузки
 для файла в $ (ls -t | head -20)
 делать
     ./cmd $ file
 сделанный

В сообщении об ошибке говорится все. Однако, как помощь в решении таких проблем в будущем, вы можете принять некоторые практики:

  1. Прокомментируйте строку, которая вызывает ошибку:
  recent_files = ($ (ls -t | head -20)) 

и запустить

  bash -n myScript.sh 

Это проверит ошибки в скрипте.

  1. Комментируйте блок строк следующим образом:

     : << 'EOF' lines of code EOF 

и запустить

  bash -n myScript.sh 

Используя эту методологию, вы сможете приблизить ошибочную строку в своем скрипте.

Возвращаясь к вашей конкретной проблеме, многие уже ответили, что ее вызывает – пробелы вокруг знака = .

  • Связаны ли цепи с атомами?
  • Изменение IFS не вступает в силу
  • Как назвать файл на самом глубоком уровне дерева каталогов
  • Значение символов «-» и «+» при завершении фоновых процессов?
  • как заменить значение вычислением в bash / sed
  • Реконструкция записи с разделителями табуляции в bash не работает
  • Ничего не делать в сценарии bash
  • Как запустить бесконечный цикл в фоновом режиме
  • Рисование гистограммы с выхода команды bash
  • Использование набора -e в Bash
  • Правильный синтаксис для операторов `if ... elif`
  • Interesting Posts

    xterm warning: попытался подключиться к диспетчеру сеанса

    Автоматически находить позицию, начиная с последней команды, запущенной в tmux

    Просмотр удаленного рабочего стола Ubuntu с Windows 7

    LXC: общая папка в гостевой машине не работает, как ожидается

    Как вы переупаковываете пакет deb для более старой ОС?

    новые строки и переменная bash

    После установки Windows Fedora больше не загружается. Получение ошибки: файл ‘/ vmlinuz’ не найден. Как мне исправить загрузку?

    Vim, контекстно-зависимое поведение комментариев / неудобств

    Есть ли способ сделать функцию просмотра vnc, например, Xming, позволяя свободно перемещать окна Linux?

    программа пейджера, как меньше, способна повторять верхние N строк

    Как использовать один nic для трафика хранения и другого для сетевого трафика в Linux (Slackware)?

    Как изменить цвет текста, соответствующий регулярному выражению в vim?

    Сравнение шаблонов внутри awk

    Bash – синтаксис в эхом

    Восстановить файлы ext3 с жесткого диска с плохим сектором

    Linux и Unix - лучшая ОС в мире.