2013-10-14 5 views
1

Мне нужно построить абсолютный путь к файлу, основанный на значениях двух переменных в bash. У меня есть следующие две переменные:Построить путь к файлу с использованием расширения параметра оболочки

MY_FILE_NAME=myfile-1.0.0.80234.txt ### This variable is NOT guaranteed to be set 
WORKING_DIR=/var/my_working_dir  ### This variable is guaranteed to be set 
MY_PATH=<Some parameter expansion magic> 

Если переменная MY_FILE_NAME установлен, то my_path должен иметь значение:

/var/my_working_dir/myfile-1.0.0.80234.txt 

Если переменная MY_FILE_NAME не установлен, то my_path должна быть такой же, как значения WORKING_DIR , Как достичь этого, используя расширение параметра, желательно всего в одной строке.

+1

Если вы не возражаете, завершающая '/', то просто ** 'my_path =" $ WORKING_DIR/$ MY_FILE_NAME «** также будет работать – anubhava

ответ

2

должно работать для вас:

[[ $MY_FILE_NAME ]] && MY_PATH="$WORKING_DIR/$MY_FILE_NAME" || MY_PATH="$WORKING_DIR" 
+0

Спасибо! Это сработало. Я понял, что я задал глупый вопрос, когда впервые увидел ваш комментарий. Это нормально, если добавляются дополнительные трейлинг-косые черты. –

+0

А в этом случае вам просто нужно было «MY_PATH =» $ WORKING_DIR/$ MY_FILE_NAME »' – anubhava

2

попробовать это:

MY_PATH=${WORKING_DIR}${MY_FILE_NAME:+/}${MY_FILE_NAME:-} 
+0

Это добавит лишний символ '/' в конце и OP написал 'Если переменная MY_FILE_NAME не установлена, MY_PATH должен быть таким же, как значение WORKING_DIR.' – anubhava

+0

@anubhava: сделал коррекцию – michael501

+1

Спасибо, я думаю, это упрощено: 'MY_PATH = $ {WORKING_DIR} $ {MY_FILE_NAME: + /} $ {MY_FILE_NAME}' – anubhava