Bash – Passing an empty string as a commandline argument using a bash variable to a command

bash

I have a daemon that can be run manually from a bash shell like this:

daemon-binary --name some-name --separator '' /path/to/file

The command-line options for this daemon should be configured in /etc/default/daemonname like this:

DAEMON_OPTS="--name some-name --separator '' /path/to/file"

This config is sourced by an init-script that starts the daemon passing the commandline options found in DAEMON_OPTS like this:

daemon-binary "$DAEMON_OPTS"

The result is, that the string '' gets quoted again and instead of an empty string the daemon-binary gets passed two single. So in fact the result is the same as calling:

daemon-binary --name some-name --separator "''" /path/to/file

As far as I understand bash splits the DAEMON_OPTS at each whitespace, then quotes all the pieces and passes them to the daemon-binary.

Is there any way to write the bash variable DAEMON_OPTS such that what's currently being expanded to "''" will be expanded into an empty string?

Best Answer

This is a case where you don't want to quote the expansion of DAEMON_OPTS:

DAEMON_OPTS="--name some-name --separator '' /path/to/file"
daemon-binary $DAEMON_OPTS