2013-10-14 80 views
1

我需要根據bash中兩個變量的值構造絕對文件路徑。我有以下兩個變量:使用shell參數擴展構建文件路徑

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