2016-11-07 163 views
0

我被困在這個問題上:我需要一個動態表達式生成,必須傳遞給ls命令。BASH動態命令生成

下面的代碼我想:

op="ext" 
fileName="MDL_test_" 
fileExt=".csv" 

if [[ $op == "noext" ]] ; then 
    searchExp="*$fileName*" 
else 
    searchExp="*$fileName*$fileExt" 
fi 

ls "$("./files/"$searchExp)" 

但是,當我執行腳本這是我得到:

./ext_test.sh: line 15: ./files/MDL_test_30160410.csv.gz: Permission denied 
ls: cannot access : No such file or directory 

我覺得我做錯了什麼,但我不能找出它...

+1

你究竟在做什麼*試圖完成什麼?你應該[首先不要在腳本中使用'ls'](http://mywiki.wooledge.org/ParsingLs)。 – tripleee

+1

@tripleee在這種情況下使用ls絕對沒有問題。 – 123

+1

作爲真正命令的佔位符,沒關係;但是'echo'也可以起作用,並且副作用更少。 – tripleee

回答

3

你只需要建立起來的字符串;在將擴展結果傳遞到ls之前,大多數語法都由shell評估。

if [[ $op == noext ]]; then 
    fileExt= 
else 
    fileExt=.csv 
fi 

ls ./files/*"$fileName"*"$fileExt" 
+0

謝謝你,我沒有想到最簡單的解決方案! – Hammond95