0

GIVEN:

A string variable containing characters that are used by bash for expansion or as delimiters, e.g.

> path="/this/path/contains whitespace/and/asterisk */myfile.txt"

GOAL:

I want to expand the variable in a way that those bash syntax elements are backslashed (or disabled but not simply quoted), i.e. the output of solution would be

> solution $path
/this/path/contains\ whitespace/and/asterisk\ \*/myfile.txt

QUESTION:

Isn't there a command in bash that does that, rather than having to struggle with all special characters on my own?

Frank-Rene Schäfer
  • 3,182
  • 27
  • 51

1 Answers1

1

Use the %q specifier of printf (a bash builtin):

path="/this/path/contains whitespace/and/asterisk */myfile.txt"
printf '%q\n' "$path"
M. Nejat Aydin
  • 9,597
  • 1
  • 7
  • 17