Thread: BUG #17736: when psql -c is used, the $ sign is escaped
The following bug has been logged on the website: Bug reference: 17736 Logged by: dafoer_x Email address: dafoer_x@163.com PostgreSQL version: 14.0 Operating system: centos Description: [pg14@VM-219-249-centos ~]$ psql -d postgres -p 29822 -h 127.0.0.1 -c "set lc_monetary='en_US.UTF-8'; drop table if exists t_mony; create table t_mony(c1 bigint,c2 money); insert into t_mony values(2,'$1.00'); select * from t_mony;" c1 | c2 ----+------- 2 | $0.00 (1 row) postgres=# set lc_monetary='en_US.UTF-8'; drop table if exists t_mony; create table t_mony(c1 bigint,c2 money); insert into t_mony values(2,'$1.00'); select * from t_mony; SET DROP TABLE CREATE TABLE INSERT 0 1 c1 | c2 ----+------- 2 | $1.00 (1 row) Because $ is escaped, the results are different when the same command is executed in psql and internally. I would like to ask how to solve this problem, or why there is this difference? Regards
On Wed, Jan 4, 2023 at 5:00 PM PG Bug reporting form <noreply@postgresql.org> wrote:
> Because $ is escaped, the results are different when the same command is
> executed in psql and internally.
> I would like to ask how to solve this problem, or why there is this
> difference?
When passing a quoted argument to psql, it is necessary to account for the shell's interpretation, for example:
$ echo "foo $1"
foo
foo
$ echo "foo \$1"
foo $1
foo $1