Как использовать переменную в строке регулярного выражения grep в bash-скрипте - PullRequest
0 голосов
/ 06 ноября 2018

У меня есть скрипт, который я использую для загрузки EJBCA Community. Они делают что-то немного другое, когда помещают минорную версию в основную версию. Например, EJBCA Community 6.10.0 имеет младшую версию в этой папке 6.10.1.2.

    #Set build (This is actually passed as a command line argument in the main script.  But for clarity I am putting it here like this.    
    EJBCA_BUILD=6.10.0
    #Check to see if standard version URL works (no minor patched version)    
    STATUS="$(curl -s --head -w %{http_code} "https://sourceforge.net/projects/ejbca/files/ejbca6/ejbca_$EJBCA_BUILD/ejbca_ce_$EJBCA_BUILD.zip" -o /dev/null)"
            echo $STATUS
            #If it doesn't exist grep to find out what the patched version is and create $EJBCA_File with the version.
            if [ $STATUS = 404 ]; then
                    EJBCA_FILE="$(curl -s -L  "https://sourceforge.net/projects/ejbca/files/ejbca6/ejbca_$EJBCA_BUILD/ejbca_ce_$EJBCA_BUILD/" | grep -o -i "ejbca_ce_$EJBCA_BUILD_[0-9].zip" | head -n1)"
                    #Bring the URL together so we can download it.
                    EJBCA_URL=https://sourceforge.net/projects/ejbca/files/ejbca6/ejbca_$EJBCA_BUILD/$EJBCA_FILE.zip
            elif [ $STATUS = 200 ]; then
                    # If it works then download it as is.
                    EJBCA_URL=https://sourceforge.net/projects/ejbca/files/ejbca6/ejbca_$EJBCA_BUILD/ejbca_ce_$EJBCA_BUILD.zip
            else
                    echo -n "There was some other error returned from the server than 404 or 200.  Exiting."
                    echo -n "The error code was $STATUS"
            exit 1
            fi

Проблема, с которой я столкнулся, - это часть grep -o -i "ejbca_ce_ $ EJBCA_BUILD_ [0-9] .zip". Я не могу заставить переменную внутри регулярного выражения работать. Я предполагаю, что это потому, что он неправильно анализирует и переменная появляется пустой. Любая помощь будет принята с благодарностью.

1 Ответ

0 голосов
/ 06 ноября 2018

Используйте фигурные скобки, чтобы убедиться, что имя вашей переменной соответствует вашему, например, ${EJBCA_BUILD} - в этом случае я подозреваю, что, поскольку подчеркивание (_) является допустимым символом переменной, вы непреднамеренно используете переменную $EJBCA_BUILD_ который не установлен, поэтому заменяется пустой строкой, в результате чего ваше grep выражение будет grep -o -i "ejbca_ce_[0-9].zip", что не то, что вы хотите.

Вы можете увидеть это, выполнив простой тест в вашей оболочке:

$ EJBCA_BUILD=dummy

$ echo "ejbca_ce_$EJBCA_BUILD_[0-9].zip"
ejbca_ce_[0-9].zip

$ echo "ejbca_ce_${EJBCA_BUILD}_[0-9].zip"
ejbca_ce_dummy_[0-9].zip
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...