I was writing a shell script for inserting a string value through a Microsoft sqlcmd
variable into a Microsoft SQL server database table and noticed some unexpected behavior. It appeared the trailing equals (=
) character and everything after were being truncated (the target column had no character limit). In attempt to narrow down the source of the behavior, I wrote a simple Microsoft SQL script (test.sql
) that prints a sqlcmd
variable:
PRINT '$(PrintMe)'
And then tested it with the following command:
sqlcmd -S localhost -U sa -P password -v PrintMe='abc==' -i test.sql
To my surprise, the output was abc
instead of the expected abc==
.
At first, I thought this was sqlcmd
doing something strange with my variable value, but altering the script:
:setvar PrintMe "abc=="
PRINT '$(PrintMe)'
printed abc==
as expected.
Now it made me wonder if zsh
or bash
were misinterpreting those characters for some reason (e.g. as macros/expansions). Using a double-quoted value made no difference in the output. In fact, I noticed a variable value like abc=123
output just abc
, truncating everything including and after the equals. Trying to escape the =
character using a value like 123\=
output 123\
. After reading about zsh =
expansion, though I doubted it was the cause, I tried running unsetopt EQUALS
but saw no change in the output.
I ran these commands with sqlcmd
1.6.0, zsh 5.9 (x86_64-apple-darwin21.3.0) on macOS Ventura 13.6.6 and again with bash 5.2.26(1)-release (x86_64-apple-darwin22.6.0) with no change in results.
Is there any explanation for what's going on here?