脚本函数中的 sed 命令不起作用?

脚本函数中的 sed 命令不起作用?

我有一个sed命令行,将 ASCII 1 替换为|

sed -e 's/^A/\|/g' file_name

这有效。但是,当我将它放入 bash 文件中的函数中时:

func(){
    sed -e 's/^A/\|/g'
}

它不起作用:

func file_name

只是挂起,而不是显示文件。

我犯了一个错误吗?我打开了一个新终端,所以我的 bash 肯定已加载。

答案1

您必须将其file_name作为输入参数进行处理,它不仅仅会神奇地应用于函数中的命令......

func() {
    sed -e 's/^A/\|/g' "$1"
}

传递的第一个参数存储在 中$1,第二个参数存储在 中$2,依此类推。

这适用于您的版本,顺便说一句:func < file_name

答案2

它实际上并没有挂起。它等待输入:-)

要么你这样做

func() # replace something in the file, i.e. modify it
{
    sed -e 's/^A/\|/g' -i "$1"
}

或这个

func() # output the contents of the file to console after applying sed
{
    sed -e 's/^A/\|/g' < "$1"
}

另外 bash/POSIX shell 也不是 C。

相关内容