我需要将参数扩展作为程序参数传递。扩展将导致文件名带有空格。因此,我将其双引号括起来以使文件名成为一个单词:"$var"
。
只要$var
包含文件名,该程序就会获得一个单词参数,并且可以正常运行。但是,有时扩展会导致一个空字符串,当作为参数传递该字符串时,它将破坏程序(我无法更改)。
根据Bash参考手册,不删除空字符串是指定的行为:
如果将没有值的参数用双引号引起来,则将生成空参数并保留该参数。
但是,当我需要引用变量,又需要丢弃空字符串扩展时,该如何处理呢?
编辑:
多亏了George Vasiliou,我发现我的问题中缺少一个细节(只是试图使其简短:))。运行该程序是一个很长的java调用,缩写看起来像这样:
java -cp /etc/etc MyClass param1 param2 "$var" param4
确实,使用if
像乔治描述的那样的陈述可以解决这个问题。但是,这将需要一个在then
子句中带有“ $ var”的调用,以及另一个在子句中不带有“ $ var”的调用else
。
为了避免重复,我想看看是否有一种方法可以使用单个调用,该调用在空“ $ var”时放弃扩展。
该${parameter:+word}
参数扩展形式,似乎做的工作
( xyz=2; set -- ${xyz:+"$xyz"}; echo $# )
1
( xyz=; set -- ${xyz:+"$xyz"}; echo $# )
0
( unset xyz; set -- ${xyz:+"$xyz"}; echo $# )
0
所以应该翻译成
program ${var:+"$var"}
在你的情况下
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句