我是尝试编写 bash 函数的新手,所以也许我做错了什么,但是当我执行时:
myfile=test.txt
cat $myfile 2>&1 | tee "cat_$(echo "$myfile" | tr . _)_$(date +%Y_%m_%d_%H%M%S).txt"
它保存一个以cat_test_txt_
但是当我将此功能保存在我的.bashrc
:
catfile () {
cat $1 2>&1 | tee "cat_$(echo "$1" | tr . _)_$(date +%Y_%m_%d_%H%M%S).txt";
}
然后执行:
catfile test.txt
它保存一个以cat_test.txt_
有谁知道为什么是“。” 没有被“_”取代?
我不知道,我无法复制。
您可以
typeset -f catfile
检查您的函数是否按照您的想法定义,或者运行(set -o xtrace; catfile test.txt)
以查看它实际在做什么。但是在这里,如果使用
bash
,我宁愿写它:使用
bash
's 内置printf
格式和时间戳扩展以及 ksh93 风格的${param//pattern/replacement}
参数扩展运算符来执行.
->_
替换。或
zsh
等价物:此处使用
zsh
's internaltee
当输出被多次重定向并提示扩展(此处在使用%
参数扩展标志进行参数扩展时启用)以生成时间戳。您的方法存在一些(不相关的)问题:
echo
的不能用于任意数据$1
。--
你之前忘$1
了划定选项