다른 Bash 문자열 이스케이프 질문(에코 사용)

다른 Bash 문자열 이스케이프 질문(에코 사용)

내 cron 작업을 업데이트하기 위해 bash 스크립트에서 다음 줄을 사용하려고 합니다.

(sudo crontab -l ; echo "0 6 1-7 * * [ $(/usr/bin/date +\%u) == 7 ] && sh $script_path > $log_path") | sort - | uniq - | sudo crontab -

이 전에 $script_path$log_path정의되었습니다. 나는 이것이 일반적으로 작동한다는 것을 알고 있습니다. 나는 하나만 가지고 있습니다. $(/usr/bin/date +\%u)crontab 파일에 기록되면 빈 문자열로 확인됩니다. 텍스트를 그대로 유지해야 합니다.

(중요한 것은 아니지만 요일을 확인하는 것이 중요합니다. 이 작업은 매월 첫 번째 토요일에 실행됩니다.)

전체 하위 문자열을 어떻게 "이스케이프"합니까?

답변1

\달러 기호 앞에 사용하여 문자 그대로의 값을 얻을 수 있습니다.

(sudo crontab -l ; echo "0 6 1-7 * * [ \$(/usr/bin/date +\%u) == 7 ] && sh $script_path > $log_path") | sort - | uniq - | sudo crontab -

답변2

\문제가 있는 각 문자를 이스케이프 처리하려면(Hunter.S.Thompson의 답변 참조)을 사용하거나 다음과 같이 묶인 문자열과 함께 작은따옴표를 사용할 수 있습니다 .

(sudo crontab -l ; echo '0 6 1-7 * * [ $(/usr/bin/date +\%u) == 7 ] && sh '"$script_path > $log_path") | sort -u | sudo crontab -

저는 개인적으로 문자를 이스케이프 처리하는 것을 피하는 것을 선호합니다. 왜냐하면 가독성이 나빠진다고 생각하기 때문입니다.

관련 정보