bug-bash
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Problem outputting a quote in a variable expansion which is in a here do


From: Daniel Einspanjer
Subject: Problem outputting a quote in a variable expansion which is in a here doc
Date: Wed, 07 Dec 2016 00:56:00 +0000

Configuration Information [Automatically generated, do not change]:
Machine: x86_64
OS: darwin15.6.0
Compiler: clang
Compilation CFLAGS:  -DPROGRAM='bash' -DCONF_HOSTTYPE='x86_64' -DCONF_OSTYPE='darwin15.6.0' -DCONF_MACHTYPE='x86_64-apple-darwin15.6.0' -DCONF_VENDOR='apple' -DLOCALEDIR='/usr/local/Cellar/bash/4.4.5/share/locale' -DPACKAGE='bash' -DSHELL -DHAVE_CONFIG_H -DMACOSX   -I.  -I. -I./include -I./lib -I./lib/intl -I/private/tmp/bash-20161112-61463-r79i9i/bash-4.4/lib/intl  -DSSH_SOURCE_BASHRC -Wno-parentheses -Wno-format-security
uname output: Darwin den 15.6.0 Darwin Kernel Version 15.6.0: Thu Sep  1 15:01:16 PDT 2016; root:xnu-3248.60.11~2/RELEASE_X86_64 x86_64
Machine Type: x86_64-apple-darwin15.6.0

Bash Version: 4.4
Patch Level: 5
Release Status: release

Description:
    Tested on OSX as well as Ubuntu GNU/Linux 14.4 and Debian Jessie 8
    Tested with Bash 4.3 and 4.4

    When trying to output a string from a variable expansion that is inside a here doc, the quotes don't behave the same as when not in a here doc.

Repeat-By:
    Here is a small test script that demonstrates the problem:

#!/bin/bash

export VARIABLE="test test"

echo "Trying to quote inside a variable expansion inside a here document"
echo
echo The desired output is:
echo "var = \"test test\""
echo
echo "First off, taking here docs out of the equation, unescaped quotes don't work:"
echo ${VARIABLE:+var = "$VARIABLE"}
echo
echo But escaping the quotes does work:
echo ${VARIABLE:+var = \"$VARIABLE\"}

echo
echo But things get weird when the variable expansion is inside a here doc:

cat << EOF
Plain quotes don't work:
echo ${VARIABLE:+var = "$VARIABLE"}

Escaped quotes don't work:
echo ${VARIABLE:+var = \"$VARIABLE\"}

Double quotes within single quotes don't work:
echo ${VARIABLE:+'var = "$VARIABLE"'}

Even trying to single quote just the double quote is a no-go:
echo ${VARIABLE:+var = '"'$VARIABLE'"'}

I tried a couple of variants of \x22 and $'\x22', but I wasn't sure about the syntax.

Here is the only thing I have found so far that does work:
${VARIABLE:+var = $(echo '"')$VARIABLE$(echo '"')}

EOF


-Daniel

reply via email to

[Prev in Thread] Current Thread [Next in Thread]