如何在宏中通过 \immediate\write18 插入 #

如何在宏中通过 \immediate\write18 插入 #

似乎使用

\immediate\write18{echo "\string#!/bin/bash (version 1)"  > \jobname.command}%

外部\newcommand效果很好。但是,我想在 中调用\newcommand

\newcommand{\CreateBashScript}{%
   \immediate\write18{echo "\string#!/bin/bash (version 2)"  > \jobname.command}%
}%

#但这与(哈希/磅符号)有问题。

笔记:

  • 要重现该问题,您需要取消注释定义中的行\CreateBashScript

代码:

\documentclass{article}
\immediate\write18{echo "\string#!/bin/bash (version 1)"  > \jobname.command}%

\newcommand{\CreateBashScript}{%
%    \immediate\write18{echo "\string#!/bin/bash (version 2)"  > \jobname.command}%
}%

\begin{document}
    \CreateBashScript
\end{document}

答案1

由于宏在 a 中展开\write,所以我

\edef\shebang{\string#!/bin/bash}

在序言中,以便您可以使用

\newcommand{\CreateBashScript}{%
    \immediate\write18{echo "\shebang" > \jobname.command}%
}

在命令中。

正如评论中所说,您还可以#在替换文本中将其加倍

\newcommand{\CreateBashScript}{%
    \immediate\write18{echo "\string##!/bin/bash"  > \jobname.command}%
}

但我认为这\shebang更清楚。

答案2

我为这个问题奋斗了两天,在理解它的重要性之前,我曾无数次地遇到过这个很棒的答案。因此,我尝试重新表述它,剥离其本质:

如果你想在某个文件中写入文字 #,你可以这样做

\newcommand{\writeouthash}{%
  \immediate\write\myfile{\string##}%
}

相关内容