tag 20553 notabug close 20553 stop On 11/05/15 22:50, Jo Drexl (FFGR-IT) wrote: > Hi guys, > I had to write a Windows bat file for twentysomething users and - as Linux > geek - wrote a small Bash script for it. The code in question is as follows: > > echo -e "net use z: \\\\srv\\aqs /persistent:no /user:%USERNAME% $BG_PASSWD\r" > > I expected the created files being as such: > net use z: \\srv\aqs /persistent:no /user:%USERNAME% user-password > > but got: > net use z: \srvqs /persistent:no /user:%USERNAME% user-password > > Without the parameter e the code for a working file had to be: > echo "net use z: \\srv\aqs /persistent:no /user:%USERNAME% $BG_PASSWD" > but missed the Windows-newline carriage return (\r) - adding that without > changing the echo command didn't print out the carriage return character but > the literal backslash-R, as the default behaviour (parameter E) indicates. > > Long story short: Escaping doesn't work correctly, either it's the Bash > interfering (but only escaping the double backslashes, and afterwards echo -e > escaping everything correctly), or the double backslash escape doesn't work > at all. It CAN be healed by using single quotes, but then variable expansion > doesn't work, or by using a variable workaround: > > BG_SHARE='\\\\srv\\aqs' > echo -e "net use z: $BG_SHARE /persistent:no /user:%USERNAME% $BG_PASSWD\r" > > but I'm pretty positive this is a workaround, not the way it should work. > > Maybe you dig into it, if you have the time. Since I found nothing worthy > googleing the issue, it seems like a quite uncommon situation I'm in. > > BR > Jo > > P.S.: It's a standard Debian Wheezy without clickery GUI. No funny changes to > the default behaviour of Bash or the login shell.
The shell _and_ echo -e are processing the \'s To get the shell to stop you can use single quotes like: echo -e 'net use z: \\\\srv\\aqs /persistent:no /user:%USERNAME% $BG_PASSWD\r' Or to leave to shell to also process \r you can: echo $'net use z: \\\\srv\\aqs /persistent:no /user:%USERNAME% $BG_PASSWD\r' Note echo is not portable to other systems, and if that's required, printf(1) is a better option, though that will have different quoting again due to the % chars etc. cheers, Pádraig.
