文字列に*を追加し、準備された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"

それ以外の場合、シェルは*現在のディレクトリのファイルに展開されます。

シェルで試してecho "*"みてくださいecho *

これは*シェル機能の一部です(おそらく吹く)というパス名拡張

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

おすすめ記事