Chris F.A. Johnson wrote:
On Fri, 9 Jun 2017, L A Walsh wrote:
----
  First problem: If you are assigning a string to a variable,
you need to put quotes around the string.

   You don't need to quote it unless it contains literal whitespace.
---
   Not true if you want to reproduce the string as output by
"declare".  Since declare doesn't output the literal value in a
variable, but an expanded one, you need to put quotes around any
var that you intend to expand with 'declare'.

Greg's example:

  imadev:~$ x=$'foo\nbar'
  imadev:~$ declare -p x
  declare -- x="foo
  bar"

Shows that "declare" isn't quoting its output such that it can be used for assignment to a var, or as 'read' input.

To do that, you can use "printf %q" -- as in:

 x=$'foo\nbar'
 printf -v qx "%q" "$x"
 printf "%s\n" "$qx"
 $'foo\nbar'

I used double quotes around the original:

 x="$'foo\nbar'"

Which gives:

 printf "%s\n" "$x"
 $'foo\nbar'

The exact same output.

I.e. you need to double quote Greg's input for it to be re-usable as input.











Reply via email to