Categories

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
Replies

usr_profile.png
Nageshwer Reddy

User

( 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 "'
output=$($command)
# + some_command --query '"' val is not null '"'

command='some_command --query \" 'val' is not null \"'
output=$($command)
# + 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)

usr_profile.png
Apoorva Saxena

User

( 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 ")
"${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 
 

what's your interest


forum_ban8_5d8c5fd7cf6f7.gif