저는 매일 일부 쿼리를 동적으로 실행하는 스크립트를 작성하고 있습니다. 이러한 쿼리는 데이터베이스의 테이블에서 나옵니다.
다음은 쿼리 테이블의 샘플 출력입니다.
+---------------+-------------------------------+---------+
| 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