Execute command from string with both single and double quotes

General Tech Bugs & Fixes 2 years ago

0 2 0 0 0 tuteeHUB earn credit +10 pts

5 Star Rating 1 Rating

Posted on 16 Aug 2022, this text provides information on Bugs & Fixes related to General Tech. Please note that while accuracy is prioritized, the data presented might not be entirely correct or up-to-date. This information is offered for general knowledge and informational purposes only, and should not be considered as a substitute for professional advice.

Take Quiz To Earn Credits!

Turn Your Knowledge into Earnings.

tuteehub_quiz

Answers (2)

Post Answer
profilepic.png
manpreet Tuteehub forum best answer 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:

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)

profilepic.png
manpreet 2 years 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 
 

0 views   0 shares

No matter what stage you're at in your education or career, TuteeHub will help you reach the next level that you're aiming for. Simply,Choose a subject/topic and get started in self-paced practice sessions to improve your knowledge and scores.