Расширение параметра для назначения переменной среды в bash

Я хочу получить текущую версию svn с помощью bash и установить ее как переменную среды SVN_REVISION. Эта переменная среды может быть уже установлена ​​или не установлена. Если он уже установлен, я повторяю это, если не установлен, я вычисляю его, а затем повторяю. Я НЕ хочу переопределять, если SVN_REVISION уже установлен. Я использую следующий скрипт, который не работает из-за моего непонимания расширения параметра.

#!/bin/bash

# If no directory provided as an argument, uses the current working directory as the    source directory.
RAW_SRC_DIR=${1:-`pwd`}
COMPUTE_REVISION=$(svn info ${RAW_SRC_DIR} | grep '^Revision' | cut -d ':' -f2 | tr -d ' ')
echo "${COMPUTE_REVISION}" ##Gets the revision successfully
${SVN_REVISION:="$COMPUTE_REVISION"} #Fails with message: <SVN_REVISION> command not found
export SVN_REVISION
echo $SVN_REVISION

Как это исправить?


person The Governor    schedule 23.09.2013    source источник


Ответы (2)


Одним из эффектов синтаксиса ${parameter:=word} является то, что значение parameter заменяется. Это означает, что ваша оболочка попытается выполнить любое число, которое вы получите в качестве команды. Просто выполните присваивание в строке echo, а затем поставьте export.

echo ${SVN_REVISION:="$COMPUTE_REVISION"}
export SVN_REVISION
person Carl Norum    schedule 23.09.2013

Почему бы просто не сделать это очевидным способом?

[[ -z $SVN_REVISION ]] && \
  SVN_REVISION=$(svn info ${1:-`pwd`} | grep '^Revision' | cut -d ':' -f2 | tr -d ' ')
echo $SVN_REVISION
export SVN_REVISION

или, если вы настаиваете

echo ${SVN_REVISION:=$(svn info ${1:-`pwd`} |
                       grep '^Revision' |
                       cut -d ':' -f2 |
                       tr -d ' ')}
export SVN_REVISION
person rici    schedule 23.09.2013
comment
Спасибо. Я знаю, что окружающий код с условием if будет работать. Возможно, мне следовало упомянуть, что я пытаюсь догнать расширение параметров и хочу его использовать. - person The Governor; 24.09.2013
comment
Хорошо, добавил еще один. Сначала изучите функции, а затем научитесь их использовать :) - person rici; 24.09.2013