에코에서 * 확장 억제

에코에서 * 확장 억제

저는 매일 일부 쿼리를 동적으로 실행하는 스크립트를 작성하고 있습니다. 이러한 쿼리는 데이터베이스의 테이블에서 나옵니다.

다음은 쿼리 테이블의 샘플 출력입니다.

+---------------+-------------------------------+---------+
| query_name    | query                         | userid  |
+---------------+-------------------------------+---------+
| All_User      | select * from users LIMIT 10; | jmatthe |
+---------------+-------------------------------+---------+

select * from users LIMIT 10;이제 쿼리를 동적으로 실행 해야 합니다 . 출력의 각 줄을 읽고 출력에 쿼리를 저장하고 있습니다.

query_name=$(echo $query | cut -d\| -f1)
query_sql=$(echo $query | cut -d\| -f2)
query_user=$(echo $query | cut -d\| -f3)

이제 여기서 문제가 발생합니다. 내 줄에 *문자가 포함되어 있으므로 echo $query확장은 *해당 문자를 현재 디렉터리의 파일로 바꿉니다. 기본적으로 내 query_sql매장은 이렇게 생겼어요.

select batchemail.sh query_output.txt from tbl_query

변수에서 동일한 내용을 얻을 수 *있도록 행의 내용을 보존하고 싶습니다 . 내 변수에 원시 데이터를 저장하고 query_sql싶습니다 .query_sql

select * from tbl_query

누구든지 나를 안내할 수 있나요?

답변1

변수 주위에 큰따옴표를 사용합니다.

query_name=$(echo "$query" | cut -d\| -f1)
query_sql=$(echo "$query" | cut -d\| -f2)
query_user=$(echo "$query" | cut -d\| -f3)

답변2

와일드카드를 비활성화하려면 set -f를 사용하십시오.

$ q='select * from users LIMIT '
$ set -f
$ echo $q
select * from users LIMIT

관련 정보