Use set -f para desativar o globbing:
$ q='select * from users LIMIT '
$ set -f
$ echo $q
select * from users LIMIT
Estou trabalhando em um script que executa dinamicamente algumas consultas diariamente. Essas consultas são provenientes de uma tabela no banco de dados.
Aqui está o exemplo de saída da tabela de consulta:
+---------------+-------------------------------+---------+
| query_name | query | userid |
+---------------+-------------------------------+---------+
| All_User | select * from users LIMIT 10; | jmatthe |
+---------------+-------------------------------+---------+
Agora, preciso executar a consulta select * from users LIMIT 10;
dinamicamente. Eu estou lendo cada linha da saída e armazenando a consulta da saída.
query_name=$(echo $query | cut -d\| -f1)
query_sql=$(echo $query | cut -d\| -f2)
query_user=$(echo $query | cut -d\| -f3)
Agora aqui é onde o problema surge. Como minha linha contém um caractere *
, echo $query
expande o *
para substituí-lo pelos arquivos no diretório atual. Então, basicamente, meu query_sql
armazena algo assim.
select batchemail.sh query_output.txt from tbl_query
Eu quero preservar o *
na linha para que eu obtenha o mesmo na minha variável query_sql
. Eu quero que minha variável query_sql
armazene os dados originais.
select * from tbl_query
Alguém pode me orientar sobre isso?
Use aspas duplas em torno da variável:
query_name=$(echo "$query" | cut -d\| -f1)
query_sql=$(echo "$query" | cut -d\| -f2)
query_user=$(echo "$query" | cut -d\| -f3)