参数顺序在bashshell脚本中是如何工作的?

参数顺序在bashshell脚本中是如何工作的?,bash,Bash,我想理解为什么这两行代码都能工作,也都能产生结果 在BASH中运行此shell脚本创建的文件中包含相同的内容 也许那时我可以想出如何获得我想要的输出,这正是我想要的 文件名,其中没有写入[/home/inst1/]]行 第1行: TargetDir=$(ls -d /home/inst1/ *.txt *.wmv *.odt >> /home/inst1/EXEofThurs9.txt) 第二行: TargetDir=$(ls -d *.txt *.wmv *.odt /hom

我想理解为什么这两行代码都能工作,也都能产生结果 在BASH中运行此shell脚本创建的文件中包含相同的内容

也许那时我可以想出如何获得我想要的输出,这正是我想要的 文件名,其中没有写入[/home/inst1/]]行

第1行:

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  

shell在执行命令之前展开所有通配符。参数顺序与您输入的参数顺序相同;每个通配符都将被所有匹配的文件替换,按字典顺序排列。所以当你这样做的时候:

ls -d /home/inst1/ *.txt *.wmv *.odt
shell展开当前目录中的每个通配符(因为通配符没有目录前缀),结果命令为:

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)

如果不希望文件中包含
/home/inst/
,为什么要将其作为
ls
的参数?重定向输出时,为什么要将输出指定给变量?不会有任何输出,因此这会将
TargetDir
设置为空字符串。@Barmar zomg,在internet上的粗略教程站点学习时可能会发生这种情况,哈。明白了,谢谢,看来你走错了路。如果你想对所有这些文件做些什么,
ls
不应该是解决方案的一部分。这不会让我感到惊讶。在学习新的领域时,我倾向于探索沼泽地。只要一次只学一件小事,不断积累,最终获得做任何我需要做的工作的能力。短期目标是翻阅几十个目录,让脚本将每个文件的名称写入一组文件中,这些文件只包含基于文件的(所有相同的)文件扩展名。不是移动文件,而是创建那些List~files.So,文件是由正在执行的代码创建的,但变量为空。我懂了。我没有测试过,因为我看到文件已经生成。如果您想将输出同时放入文件和变量中,可以使用
tee