如何将 * 附加到字符串并将准备好的 SQL 查询分配给另一个变量?即,(从...中选择*)

如何将 * 附加到字符串并将准备好的 SQL 查询分配给另一个变量?即,(从...中选择*)

我正在尝试创建一个 SQL 查询并尝试将其分配给某个变量,但我无法做到这一点。

TABLENAME=foo
QUERY="select * from $TABLENAME"
echo $QUERY

我期望查询是select * from foo

相反,我得到的是select [file names in the directory] from foo

这正是我得到的,而不是原始查询。

从 foo 选择 Anaconda3-5.3.1-Linux-x86_64.sh hadoop-2.7.3 hadoop-2.7.3.tar.gz script.sh

答案1

您必须引用您的变量:

echo "$QUERY"

否则 shell 会将 扩展*为当前目录中的文件。

在你的 shell 中尝试echo "*"一下echo *

*是你的 shell 的一个功能的一部分(可能是重击)称为路径名扩展

从 bash 手册页:

特殊模式字符的含义如下:

*      Matches any string, including the null string.  When the globstar  shell  option
       is  enabled, and * is used in a pathname expansion context, two adjacent *s used
       as a single pattern will match all files and zero or more directories and subdi-
       rectories.   If followed by a /, two adjacent *s will match only directories and
       subdirectories.

为了防止这种情况,您可以使用*反斜杠转义\,或者用双引号"或单引号引用它'

例子:

# no pathname expansion
$ echo \*
*
$ echo "*"
*
$ echo '*'
*

# pathname expansion
$ echo *
file_x file_y file_z_in_this_directory

单引号的问题是,它会阻止变量的扩展(也称为参数扩展)。所有字符均按字面解释。

# no variable expansion
$ echo '$QUERY'
$QUERY

# variable expansion
$ echo "$QUERY"
select * from foo

# variable expansion and pathname expansion
$ echo $QUERY
select file_x file_y file_z_in_this_directory from foo

相关内容