I need to pass as a program argument a parameter expansion. The expansion results in a filename with spaces. Therefore, I double-quote it to have the filename as a single word: "$var"
.
As long as $var
contains a filename, the program gets a single-word argument and it works fine. However, at times the expansion results in an empty string, which when passed as argument, breaks the program (which I cannot change).
Not removing the empty string is the specified behavior, according to Bash Reference Manual:
If a parameter with no value is expanded within double quotes, a null argument results and is retained.
But then, how do I manage the case where I need to quote variables, but also need to discard an empty string expansion?
EDIT:
Thanks to George Vasiliou, I see that a detail is missing in my question (just tried to keep it short 🙂 ). Running the program is a long java call, which abbreviated looks like this:
java -cp /etc/etc MyClass param1 param2 "$var" param4
Indeed, using an if
statement like that described by George would solve the problem. But it would require one call with "$var" in the then
clause and another without "$var" in the else
clause.
To avoid the repetition, I wanted to see if there is a way to use a single call that discards the expansion of "$var" when it is empty.
Best Answer
The
${parameter:+word}
parameter expansion form seems to do the jobSo that should translate to
in your case