Bash

ls 用於 cut -f 字元串不起作用

  • February 21, 2014

我在將cut輸出輸入到ls.

這不起作用:

rep="S1_1000,0000-00-00c,0000-00-00d,0000-00-00e"  
ls tab_yeast/{`echo $rep | cut -f2- -d','`}*.tab.gz  
ls: cannot access tab_yeast/{0000-00-00c,0000-00-00d,0000-00-00e}*.tab.gz: No such file or directory

雖然 ls 在該字元串上有效:

ls tab_yeast/{0000-00-00c,0000-00-00d,0000-00-00e}*.tab.gz  

任何的想法?

我不相信您可以使用大括號擴展嵌套命令。它似乎只能包含文字。你應該能夠利用eval得到你想要的東西。

例子

$ a=1
$ b=5
$ echo {$a..$b}
{1..5}

eval但是,如果您echo

$ eval echo {$a..$b}
1 2 3 4 5

你的例子

$ ls -l tab_yeast
total 0
-rw-rw-r--. 1 saml saml 0 Feb 21 05:40 0000-00-00c.1.tab.gz
-rw-rw-r--. 1 saml saml 0 Feb 21 05:40 0000-00-00d.1.tab.gz
-rw-rw-r--. 1 saml saml 0 Feb 21 05:40 0000-00-00e.1.tab.gz
-rw-rw-r--. 1 saml saml 0 Feb 21 05:40 S1_1000.1.tab.gz

展開顯示

$ eval echo tab_yeast/{`echo $rep | cut -f2- -d','`}*.tab.gz  
tab_yeast/0000-00-00c.1.tab.gz tab_yeast/0000-00-00d.1.tab.gz tab_yeast/0000-00-00e.1.tab.gz

你修改的命令

$ ls -1 $(eval echo tab_yeast/{`echo $rep | cut -f2- -d','`}*.tab.gz)
tab_yeast/0000-00-00c.1.tab.gz
tab_yeast/0000-00-00d.1.tab.gz
tab_yeast/0000-00-00e.1.tab.gz

引用自:https://unix.stackexchange.com/questions/116253