See More
Popular Forum

MBA (4887) B.Tech (1769) Engineering (1486) Class 12 (1030) Study Abroad (1004) Computer Science and Engineering (988) Business Management Studies (865) BBA (846) Diploma (746) CAT (651) B.Com (648) B.Sc (643) JEE Mains (618) Mechanical Engineering (574) Exam (525) India (462) Career (452) All Time Q&A (439) Mass Communication (427) BCA (417) Science (384) Computers & IT (Non-Engg) (383) Medicine & Health Sciences (381) Hotel Management (373) Civil Engineering (353) MCA (349) Tuteehub Top Questions (348) Distance (340) Colleges in India (334)
See More

Execute command from string with both single and double quotes

General Tech Bugs & Fixes
Max. 2000 characters

Nageshwer Reddy


( 7 months 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:

some_command --query "'val' is not null"

What I try to achieve is to build this command and execute it from a bash script

command='some_command --query " 'val' is not null "'
# + some_command --query '"' val is not null '"'

command='some_command --query \" 'val' is not null \"'
# + some_command --query '\"' val is not null '\"'

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)

Apoorva Saxena


( 7 months ago )

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 ")

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.


$ command=(echo -E " 'val' is not null ")
$ "${command[@]}"
 'val' is not null 

what's your interest