탈출() 에코

탈출() 에코

;어떻게 탈출 하거나 에코 할 수 있나요 ()? ""이 명령을 에코하고 싶습니다

"LOAD DATA INPATH '$i' INTO TABLE transient.url_log_201803 partition (ds='$TGLS', periode='$WKTS');"

syntax error near unexpected token하지만 아래와 같이 작은따옴표를 이스케이프 처리하여 명령을 변경했는데도 }'' 라고 표시됩니다.

'LOAD DATA INPATH '"'"$i"'"' INTO TABLE transient.url_log_201803 partition (ds='"'"$TGLS"'"', periode='"'"$WKTS"'"');'

해당 명령을 터미널이나 파일에 에코하는 방법을 모르겠습니다. 나는 또한 이것을 탈출하기 위해 시도했지만 \아무것도

답변1

복잡한 데이터를 사용하려고 하지 마세요 echo.

다음은 여기 문서를 사용합니다.

cat <<END_SQL
LOAD DATA INPATH '$i' INTO TABLE transient.url_log_201803 PARTITION (ds='$TGLS', periode='$WKTS');
END_SQL

다음 명령으로 파이프해야 하는 경우 mysql(이것은 Hive SQL 명령이지만 Hive 클라이언트가 일반적으로 무엇이라고 불리는지 모르므로 mysql예제에서는 이를 사용합니다):

cat <<END_SQL | mysql
LOAD DATA INPATH '$i' INTO TABLE transient.url_log_201803 PARTITION (ds='$TGLS', periode='$WKTS');
END_SQL

변수를 확장하지 않고 전달해야 하는 경우:

cat <<'END_SQL' | mysql
LOAD DATA INPATH '$i' INTO TABLE transient.url_log_201803 PARTITION (ds='$TGLS', periode='$WKTS');
END_SQL

여기에 있는 문서를 사용하면 더 읽기 쉬운 코드(짧은 줄)를 작성할 수도 있습니다.

cat <<'END_SQL' | mysql
LOAD DATA INPATH '$i'
INTO TABLE transient.url_log_201803
     PARTITION (ds='$TGLS', periode='$WKTS');
END_SQL

문서 내용과 (더 중요한) 닫는 태그( END_SQL위)는 들여쓰기하면 안 됩니다.

for ...some loop range...; do
    cat <<END_SQL | mysql
LOAD DATA INPATH '$i'
INTO TABLE transient.url_log_201803
     PARTITION (ds='$TGLS', periode='$WKTS');
END_SQL
done

닫는 태그가 들여쓰기되어 있으면 쉘은 이를 찾지 못하며 여기에서 파일 끝에서 문서가 종료된다는 오류 메시지를 받게 됩니다.

답변2

변수 확장을 방지하려면 $로 이스케이프해야 합니다 \. 변수가 작은따옴표로 묶여 있으므로 불필요한 것처럼 보이지만 작은따옴표를 큰따옴표로 묶으면 작은따옴표가 문자 그대로 해석됩니다.

$ echo "LOAD DATA INPATH '$i' INTO TABLE transient.url_log_201803 partition (ds='$TGLS', periode='$WKTS');"
LOAD DATA INPATH '' INTO TABLE transient.url_log_201803 partition (ds='', periode='');

이스케이프 변수:

$ echo "LOAD DATA INPATH '\$i' INTO TABLE transient.url_log_201803 partition (ds='\$TGLS', periode='\$WKTS');"
LOAD DATA INPATH '$i' INTO TABLE transient.url_log_201803 partition (ds='$TGLS', periode='$WKTS');

전체 내용을 큰따옴표로 묶으려는 경우:

$ echo "\"LOAD DATA INPATH '\$i' INTO TABLE transient.url_log_201803 partition (ds='\$TGLS', periode='\$WKTS');\""
"LOAD DATA INPATH '$i' INTO TABLE transient.url_log_201803 partition (ds='$TGLS', periode='$WKTS');"

답변3

다음을 사용하면 괄호나 세미콜론을 이스케이프 처리할 필요가 없습니다 echo.

$ echo "Semicolons look like ';'.  Parens look like '(' and ')'."
Semicolons look like ';'.  Parens look like '(' and ')'.

관련 정보