【问题标题】:How do I access my bash function's arguments when it's called from a pipe?从管道调用 bash 函数时,如何访问它的参数?
【发布时间】:2014-01-22 13:47:53
【问题描述】:
chaouche@karabeela ~/DOWNLOADS/MUSIQUE/CD2 $ ls djavan* | awk '{print $5}' | cut -f1 -dM | sum
0
chaouche@karabeela ~/DOWNLOADS/MUSIQUE/CD2 $ sum $(ls djavan* | awk '{print $5}' | cut -f1 -dM)
158.5

chaouche@karabeela ~/DOWNLOADS/MUSIQUE/CD2 $ type sum
sum is a function
sum ()
{
    acc=0;
    for n in "$@";
    do
        acc=$(echo $acc + $n | bc);
    done;
    echo $acc
}

chaouche@karabeela ~/DOWNLOADS/MUSIQUE/CD2 $

如何使第一个表单工作?我喜欢管道。

【问题讨论】:

标签: bash function arguments pipe


【解决方案1】:

您似乎混淆了参数和标准输入流。

“|”是什么意思?将左侧命令的标准输出重定向到右侧命令的标准输入。所以你需要一个读取标准输入而不是参数的函数。以下函数对参数(如果有)求和或读取标准输入(如果没有给出参数):

sum ()
{
    acc=0;
    if [ "$#" -gt 0 ]; then
        # We were given arguments
        for n in "$@"; do
            acc=$(echo $acc + $n | bc)
        done
    else
        # We read standard input line by line
        while read line; do
            acc=$(echo $acc + $line | bc)
        done
    fi
    echo "$acc"
}

【讨论】:

    猜你喜欢
    • 2019-10-21
    • 1970-01-01
    • 1970-01-01
    • 2012-10-31
    • 1970-01-01
    • 2015-01-21
    • 2020-01-09
    • 1970-01-01
    • 2017-05-28
    相关资源
    最近更新 更多