Trying to put complex commands into a simple variable is bound to fail. For details, see I'm trying to put a command in a variable, but the complex cases always fail!.
In all likelihood, what you are trying to do is better accomplished with a bash function.
If you really really want to use a variable, then use a bash array:
command=(some_command --query " 'val' is not null ")
"${command[@]}"
We can see the actual value of the array command
by using declare
:
$ declare -p command
declare -a command=([0]="some_command" [1]="--query" [2]=" 'val' is not null ")
We can see that this preserves the single quotes around val
.
Example
$ command=(echo -E " 'val' is not null ")
$ "${command[@]}"
'val' is not null
manpreet
Best Answer
2 years ago
I would like to execute a command in a bash script that needs both double and single quotes in it.
The command that I want to run looks like this:
What I try to achieve is to build this command and execute it from a bash script
But then the command is executed with the quotes being quoted so the actial command has a wrong syntax.
I already tried a ton of different methods like using the character codes or building the command with an array followed by executing with
"${array[@]}"
but all were to no avail.update: I'm running this with bash version
GNU bash, version 4.3.11(1)-release (x86_64-pc-linux-gnu)