2016-11-07 8 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に渡す前にシェルによって評価されます。

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

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

ありがとう、私は一番簡単な解決策は考えていませんでした! – Hammond95