Синтаксическая ошибка в команде if / else

Этот сценарий должен выполнить эту работу:

#!/usr/bin/env bash

for i in ./*.mp3; do

  mplayer "${i}"
  printf '%s\n' "${i}"

  read -p 'What to do?: ' -r ans

  if [[ "${ans}" == 'rm' ]]; then
    rm "${i}"
  elif [[ "${ans}" == 'mv' ]]; then
    mv "${i}" 'tmp'
  fi

done

PS: Предполагается, что каталог tmpуже существует и находится в вашем текущем рабочем каталоге. Если он находится в другом месте или вы ссылались на каталог /tmp, просто измените эту часть кода.

0
27.09.2017, 20:28
1 ответ

Если TYPEне установлено, пусто или полностью состоит из пробелов, ваше утверждение сводится к if [ = "hour" ], что является синтаксической ошибкой.

Поскольку вы используете sh, общим обходным решением для этого является префикс:if [ "x$TYPE" = "xhour" ]

Вы не можете просто использовать слабые кавычки, потому что ""также разрешается в if [ = "hour" ]; по крайней мере с sh. bashпри использовании более надежного синтаксиса двойной -фигурной скобки (e. г.if [[ "$TYPE" = "hour" ]])поступит правильно, не прибегая к префиксам или суффиксам.

0
28.01.2020, 02:33

Теги

Похожие вопросы