The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]



Индекс форумов
Составление сообщения

Исходное сообщение
"Доступен ShellCheck 0.9, статический анализатор для shell-ск..."
Отправлено Аноним, 31-Дек-22 21:11 
Файл находится в 5.1 и не находится в 5.2? И при чём тут файл, если баш не пытается выполнять этот код, который ему не нравится? В этом у баша большая проблема, если ему что-то не нравится, приходится играть в угадайку. Технически этот код подстановки заранее неизвестного имени даже не использовался, потому что скрипту надо передать каталог вместо файла и это никогда так и не использовалось. Но, я уверен, что он корректный и всё работает, как и ожидалось, специально это проверил. Тут большая проблема, что extglob не работает корректно с @ в имени. Просто внезапно баш после обновления решил, что надо использовать обратные кавычки тут. Выглядит 100% как баг, или регрессия.

Вот полный пример кода, в котором $() не работает, но кавычки работают как и с 5.1.

#!/bin/env bash

process_dirname(){
    local pext='@(*.mkv|*.mp4|*.avi)'
    shopt -s extglob
    fname=$(shopt -s failglob;shopt -s nocaseglob;echo "${fname}"/?("123")"qwe"$pext)
    [[ 0 -ne $? ]] && echo '#glob match failed' && exit 1
    shopt -u extglob

    if [[ ! -f "${fname}" ]];then
        echo "new filename ${fname@Q} couldn't be located, didn't guess the filename correctly"
        exit 1
    fi
    echo "# filename for ${file@Q} changed to ${fname@Q}"
}

file="$@"
[[ -n "${file}" ]] || { echo -e "Usage:\t$0 FILENAME"; exit 1; }

fname="${file##*/}"
fpath="${file%/*}"
[[ -d "${fname}" ]] && process_dirname

Ещё раз, дело именно в синтаксической ошибке от $(?()) и не в чём-либо ещё.

 

Ваше сообщение
Имя*:
EMail:
Для отправки ответов на email укажите знак ! перед адресом, например, !user@host.ru (!! - не показывать email).
Более тонкая настройка отправки ответов производится в профиле зарегистрированного участника форума.
Заголовок*:
Сообщение*:
  Введите код, изображенный на картинке: КОД
 
При общении не допускается: неуважительное отношение к собеседнику, хамство, унизительное обращение, ненормативная лексика, переход на личности, агрессивное поведение, обесценивание собеседника, провоцирование флейма голословными и заведомо ложными заявлениями. Не отвечайте на сообщения, явно нарушающие правила - удаляются не только сами нарушения, но и все ответы на них. Лог модерирования.



Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру