bash 函数将注释写入新创建的文件

bash 函数将注释写入新创建的文件

请参阅以下函数——

function touchm(){
    date=$(date +'%Y-%m-%d %H:%M:%S')
    read Y M D h m s <<< ${date//[-: ]/ }
    file_name=$1

    if [[ $file_name =~ ^[0-9a-zA-Z+_-]+.[py|pl|rb|sh] ]]; then
        echo "#
# $file_name
#
# Created by $MASTER on $M/$D/$Y at $h:$m:$s
# Copyright (c) $Y $MASTER. All rights reserved.
#
" > $1

    elif [[ $file_name =~ ^[0-9a-zA-Z+_-]+.[m|h|c|cpp|] ]]; then
        echo "//
// $file_name
//
// Created by $MASTER on $M/$D/$Y at $h:$m:$s
// Copyright (c) $Y $MASTER. All rights reserved.
//
" > $1

    elif [[ $file_name =~ ^[0-9a-zA-Z+_-]+.[ml] ]]; then
        echo "(* *)
(* $file_name *)
(* *)
(* Created by $MASTER on $M/$D/$Y at $h:$m:$s *)
(* Copyright (c) $Y $MASTER. All rights reserved. *)
(* *)
" > $1

    else
        echo "What bullshit. Give me a good file name"

    fi
}

所以每当我执行:

touchm 2-r_f.ml

这应该会生成一个带有 ml 类型注释的 ml 文件。但它并没有这样做。它生成 c 类型注释。

此外,我还需要适应 + 和 _(下划线),但目前它似乎不起作用。这是一个糟糕的正则表达式吗?如果是这样,我可以获得纠正它的指针吗?

谢谢

答案1

您可以尝试使用 cat 来执行此操作,即

cat << EOF > 输出文件名
# $file_name
#
# 由 $MASTER 于 $M/$D/$Y 的 $h:$m:$s 创建
# 版权所有 (c) $Y $MASTER。保留所有权利。
#
EOF

如果您想缩进上面的代码,请将 << 更改为 <<-,这将删除前导制表符。

而且,是的,这是一个糟糕的正则表达式。字符类(方括号)不需要管道,这是用于在圆括号内进行替代匹配。你想要类似的东西:
替换:$file_name =~ ^[0-9|az|AZ|-].[ml]
其中:$file_name =~ ^[0-9a-zA-Z+_-]
.[毫升]

您还可以用 + 替换 * 以表示 1 或更多,因为该正则表达式也会匹配“.ml”。确保连字符是字符类中的最后一个字符,否则它会假定您指定的是范围。

编辑:试试这个,刚刚用 .sh、.cpp 和 .ml 文件测试过。出于好奇,第三个 if 语句应该是针对 .ml,还是 .m 或 .l,就像你似乎要匹配的那样?第二个 if 语句也匹配 .m,所以其中一个可能是错误的,下面的代码假设第三个 if 应该是 .ml

function touchm(){
    date=$(date +'%Y-%m-%d %H:%M:%S')
    read Y M D h m s <<< ${date//[-: ]/ }
    file_name=$1

    if [[ $file_name =~ ^[0-9a-zA-Z+_-]+\.(py|pl|rb|sh)$ ]]; then
        echo "\#
# $file_name
#
# Created by $MASTER on $M/$D/$Y at $h:$m:$s
# Copyright (c) $Y $MASTER. All rights reserved.
#
" > $1

    elif [[ $file_name =~ ^[0-9a-zA-Z+_-]+\.(m|h|c|cpp)$ ]]; then
        echo "//
// $file_name
//
// Created by $MASTER on $M/$D/$Y at $h:$m:$s
// Copyright (c) $Y $MASTER. All rights reserved.
//
" > $1

    elif [[ $file_name =~ ^[0-9a-zA-Z+_-]+\.ml$ ]]; then
        echo "(* *)
(* $file_name *)
(* *)
(* Created by $MASTER on $M/$D/$Y at $h:$m:$s *)
(* Copyright (c) $Y $MASTER. All rights reserved. *)
(* *)
" > $1

    else
        echo "What bullshit. Give me a good file name"

    fi
}

相关内容