带有嵌入式引号的bash中的字符串扩展

dre*_*mac 2 bash shell expansion subshell

问题:

以下shell脚本代码不会产生预期的结果:

# MYSQL, MyUSER MyHost etc ... all defined above as normal

TARG_DB="zztest";
DB_CREATE="$($MYSQL -u $MyUSER -h $MyHOST -p$MyPASS -Bse 'create database $TARG_DB')";
Run Code Online (Sandbox Code Playgroud)

预期结果:

使用名称创建的新数据库 zztest

实际结果:

使用名称创建的新数据库 $TARG_DB

题:

如何更改此示例代码以进行$TARG_DB插值或扩展,从而产生预期结果?

Kev*_*vin 7

因为$TARG_DB在子shell中的单引号内,所以它是字面上的.在那里使用双引号,它们不会弄乱子shell.例如

$ tmp="a b c"
$ echo $tmp
a b c
$ echo $(echo $tmp)
a b c
$ echo $(echo "$tmp")
a b c
$ echo $(echo '$tmp')
$tmp
$ echo "$(echo '$tmp')"
$tmp
$ echo "$(echo "$tmp")"
a b c
Run Code Online (Sandbox Code Playgroud)