2016-11-07 3 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

В качестве заполнителя для реальной команды это нормально; но тогда «эхо» тоже будет работать, и у него будет меньше осложнений. – tripleee

ответ

3

Вам просто нужно построить струну в кусках; большая часть синтаксиса оценивается оболочкой перед передачей расширенного результата в ls.

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

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

Спасибо, я не думал про самое простое решение! – Hammond95