如何在 bashrc 别名中转义命令?

GJ.*_*GJ. 8 linux bashrc

我需要偶尔使用当前时间戳作为文件名的文件。我会这样做:

touch `date "+%Y-%m-%d_%H-%M"`.txt
Run Code Online (Sandbox Code Playgroud)

但是,我想为此定义一个别名。当我尝试添加到 bashrc 时:

alias td="touch `date \"+%Y-%m-%d_%H-%M\"`.txt"
Run Code Online (Sandbox Code Playgroud)

结果是文件名在整个会话期间是相同的,因为在登录期间只计算了一次“日期..”...

仅当我调用别名时,如何才能让命令展开?或者我必须为此使用一个函数?

谢谢

Gil*_*il' 8

shell 扩展包含alias命令的命令行并将类似的内容传递td=touch 2010-09-17_21-54.txtalias命令。您需要保护别名定义中的特殊字符不被扩展。最简单的方法是使用单引号而不是双引号:

alias td='touch `date "+%Y-%m-%d_%H-%M"`.txt'
Run Code Online (Sandbox Code Playgroud)

然后tdtouch `date "+%Y-%m-%d_%H-%M"`.txt根据需要的别名。

虽然这不是问题,但我建议使用$(…)而不是`…`,以避免复杂命令的困难(反引号具有神秘且不可移植的引用规则,而美元括号直观地工作):

alias td='touch $(date "+%Y-%m-%d_%H-%M").txt'
Run Code Online (Sandbox Code Playgroud)