2014-03-07 47 views
0

我想知道为什么这两行代码都工作,并且都生成 BASH中运行此shell脚本创建的文件中的相同内容。参数顺序如何在Bash Shell脚本中工作?

也许那么我可以弄清楚如何获得我想要的输出,这只是 文件名,而不是[[/ home/inst1 /]]行被写入那里。

第一行:

TargetDir=$(ls -d /home/inst1/ *.txt *.wmv *.odt >> /home/inst1/EXEofThurs9.txt) 

二号线:

TargetDir=$(ls -d *.txt *.wmv *.odt /home/inst1/ >> /home/inst1/EXEofThurs9.txt) 

文件的内容:

Does the SubConcious Play A Role In Programming.txt 
File_Management_At_Last_2wo_YEARS_After_Beginning.odt 
/home/inst1/ 
NEW_CHAT_With_FRANK_append_FILE.txt 
NewFile.txt 
rocheFlynSail.wmv 
What_Does_AYFJHS_Mean.txt 
+0

如果你不想'/家庭/安装/'文件中,为什么要给它作为参数传递给'ls'? – Barmar

+0

为什么在重定向输出时将输出分配给变量?将不会有任何输出,因此它将'TargetDir'设置为空字符串。 – Barmar

+0

@Barmar zomg,这可能发生在从整个互联网粗略教程网站学习时,哈。 Gotcha,谢谢 – MountainMan

回答

0

外壳扩展所有的通配符执行命令前。参数顺序与您输入的参数顺序相同;通配符将按字典顺序由所有匹配的文件替换。所以,当你这样做:

ls -d /home/inst1/ *.txt *.wmv *.odt 

外壳扩展在当前目录中的每个通配符(因为通配符没有目录的前缀),并将得到的命令是:

ls -d /home/inst1 file1.txt file2.txt file1.wmf file2.wmv file3.wmv file1.odt file2.odt 

如果你努力扩大在/home/inst1目录的通配符,你可以这样做:

(cd /home/inst1; ls *.txt *.wmv *.odt >> /home/inst1/EXEofThurs9.txt) 
+0

因此,该文件是由正在执行的代码创建的,但该变量为空。我懂了。没有测试过,因为我看到文件正在制作。 – MountainMan

+0

如果你想把输出放在文件和变量中,你可以使用'tee'。 – Barmar