我试图在 bash 脚本中使用这一行来更新我的 cron 作业:
(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 -
我个人倾向于避免转义字符,因为我认为这会损害可读性。