Если условие работает впервые, но не во второй раз

Я определил нижеследующее для и если условие в функции. Впервые он работает хорошо. Во второй раз он не запускается после цикла for, он просто пишет инструкцию echo. Почему он ведет себя так?

for outputFile in $outputFiles do echo"Output file is $outputFile" if [ $outputFile == sampple*.pdf ]; then FromFile=$OutputFilePath transferFiles fi done 

One Solution collect form web for “Если условие работает впервые, но не во второй раз”

Чтобы выполнить тест на строку с шаблоном globbing файла, используйте case :

 case "$outputFile" in sampple*.pdf) FromFile="$OutputFilePath" transferFiles ;; esac 

Чтобы выполнить проверку строки на регулярное выражение в bash или ksh93 :

 if [[ "$outputFile" =~ ^sampple.*\.pdf$ ]]; then FromFile="$OutputFilePath" transferFiles fi 

Обратите внимание на использование [[ ... ]] и =~ а не [ ... ] и == здесь.

Конструкция [ ... ] обычно не поддерживает оператор == для сравнения строк.

С помощью [[ ... ]] и == , правая часть берется как шаблон глобуса файла. Таким образом, следующее должно работать (в bash или ksh93 ):

 if [[ "$outputFile" == sampple*.pdf ]]; then # as before fi 
  • Есть ли какая-либо существенная разница при сравнении переменной как строки или как int
  • никогда не используйте оператор `-a` или` -o` с `[`
  • Вывести результат печати непосредственно в bash без использования if
  • Как я могу создать скрипт bash, который запускает irb, а затем некоторый код ruby?
  • Оператор if и else с использованием diff -q
  • (test -n $ st)! = (test -z $ st) право?
  • работает как команда, но не как сценарий оболочки. Зачем?
  • ожидаемое целочисленное выражение
  • Трейлинг двоеточий и встроенная тестовая команда
  • Какой смысл использовать «x $ START_DAEMON» = «xyes» здесь? (заголовок х)
  • Если утверждение, дающее ответ «else» для обоих результатов cmp
  • Тест POSIX и -a
  • Linux и Unix - лучшая ОС в мире.