2011-10-20 48 views
0

因此,此代码的工作:bash中的等价命令失败?

unzip $1 'CSE-5500_Computer_Science_Seminar_-_Menezes_(CSE-5500_FA11_Menezes-001)_2011_Fall_files/presentation.xml' 

但是这个代码不:

main="CSE-5500_Computer_Science_Seminar_-_Menezes_(CSE-5500_FA11_Menezes-001)_2011_Fall_files/presentation.xml" 
unzip $1 \'$main\' 

在这许多变化也失败......为什么? 这是非常混乱,我想一个解决方案,它

+0

他们究竟如何失败?什么是错误信息? – IanNorton

+0

沿着文件名的行不匹配。通常情况下,即使在错误消息中,文件名也会匹配,其他时候文件名会以某种奇怪的方式被修改。 – user1006042

+0

“某些事情”不是错误消息。这不比'东西不行'更好 – IanNorton

回答

4

尝试unzip $1 "$main"

你这样做是有太多的报价方式。

在顶部的版本:

单引号防止bash的去尝试解释的说法本身,而是被剥离,使unzip传递字符串不带任何引号。

在第二种情况:

  • 如果不报的说法,bash将试图解释括号中$main导致错误。
  • 如果您避开引号,bash将再次尝试并解释圆括号。
  • 如果您单引号参数,bash将不会执行可变扩展,并且unzip将作为其第二个参数传递文字字符串“$main”。
  • 如果你双引号的话,一切都会是恰到好处
+0

我会尝试这个,但我觉得我已经有一些点。还有一件奇怪的事情,如果后面有一行,解压缩会在最后没有额外的空间时失败。 – user1006042