Linux shell脚本:在函数中使用别名

时间:2015-01-04 17:31:58

标签: linux bash function shell alias

我使用名为ThousandsDotting别名,每3个数字(经典点数为千位)添加点.,因此100000成为100.000 }。

它在shell中工作正常,但不在函数中。 示例文件example.sh

#!/bin/bash 
function test() {
  echo "100000" | ThousandsDotting
}
alias ThousandsDotting="perl -pe 's/(\d{1,3})(?=(?:\d{3}){1,5}\b)/\1./g'"
test

如果我运行它,这就是我得到的:

$ ./example.sh
example.sh: line 3: ThousandsDotting: command not found.

在我的Bash shell脚本的函数中,管道(或者在没有管道的情况下使用它)的正确方法是什么stdout数据到此perl命令?

4 个答案:

答案 0 :(得分:3)

默认情况下,别名在bash中受限制,因此只需启用它即可。

    #!/bin/bash

    shopt -s expand_aliases
    alias ThousandsDotting="perl -pe 's/(\d{1,3})(?=(?:\d{3}){1,5}\b)/\1./g'"
    function test() {
      echo "100000" | ThousandsDotting
    }
    test

<强>输出

100.000

答案 1 :(得分:2)

在BASH中别名不是继承的

最好改为创建一个函数:

ThousandsDotting() { perl -pe 's/(\d{1,3})(?=(?:\d{3}){1,5}\b)/\1./g' "$1"; }

然后,您可以将其用作流程替换

ThousandsDotting <(echo "100000")
100.000

答案 2 :(得分:1)

alias适用于互动bash。变化

#!/bin/bash

#!/bin/bash -i

来自man bash

If the -i option is present, the shell is interactive.

答案 3 :(得分:0)

别名未在bash中展开,无法用作。您可以启用它们,有关更多信息,请查看BASH http://tldp.org/LDP/abs/html/aliases.html的永恒指南。

您可以使用bash提供的常规工具实现与宏相同:

#!/bin/bash
function test() {
    echo "100000" | perl -pe 's/(\d{1,3})(?=(?:\d{3}){1,5}\b)/\1./g'
}
test

你可以通过使函数具有参数来改进这一点:这样你就可以将任何参数传递给函数test,通过使用别名来获得你所拥有的:

#!/bin/bash

function test() {
    perl -pe 's/(\d{1,3})(?=(?:\d{3}){1,5}\b)/\1./g' "$1"
}

test 100000