bug-bash
[Top][All Lists]
Advanced

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

Re: maybe a bug in bash?


From: Kerin Millar
Subject: Re: maybe a bug in bash?
Date: Thu, 29 Jun 2023 14:57:07 +0100

On Thu, 29 Jun 2023 11:55:12 +0200
Sebastian Luhnburg <luhnburg@vi-bim.de> wrote:

> #!/usr/bin/env bash
> 
> initial_password="\$abc&xyz"
> echo "initial password: " $initial_password
> printf -v password '%q' $initial_password
> echo "initial password with escaped characters: " $password
> bash << EOF
> echo "password in here document: " ${password@Q}
> /bin/bash -c "echo 'password in subshell in here document: ' ${password@Q}"
> EOF

While Dominique has already responded adequately, I have several things to add. 
One is that you should quote the expansion of initial_password in your printf 
statement to impede word splitting and pathname expansion. Another is that you 
should not requote the string with %q then proceed to do so a second time by 
using the ${param@Q} form of expansion. Instead, use one or the other.

Traversing multiple quoting layers is hard and I would suggest simply not doing 
it, if it can be helped. That being said, you could get the results that you 
expect by conveying password as a discrete argument to bash (which is not a 
subshell, by the way). Below is an example.

#!/bin/bash
initial_password='$abc&xyz'
printf -v password %q "$initial_password"
bash <<EOF
echo "password in bash as a child:" $password
bash -c 'echo "password in bash as a grandchild: \$1"' bash $password
EOF

-- 
Kerin Millar



reply via email to

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