Sample Header Ad - 728x90

Why are my strings being truncated including and after an equals sign?

0 votes
0 answers
229 views
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](https://stackoverflow.com/questions/76902705/baffling-zsh-behavior-on-equal-sign-precedes-a-zsh-variable) , 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](https://github.com/microsoft/go-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?
Asked by Mark (101 rep)
May 13, 2024, 01:13 AM
Last activity: May 13, 2024, 07:31 AM