簡體   English   中英

從管道調用bash函數的參數時,如何訪問它?

[英]How do I access my bash function's arguments when it's called from a pipe?

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 $

如何使第一個表格起作用? 我喜歡煙斗。

看來您混淆了參數和標准輸入流。

“ |”是什么意思? 將左手命令的標准輸出重定向到右手命令的標准輸入。 因此,您需要一個讀取標准輸入而非參數的函數。 以下函數對參數求和(如果有)或讀取標准輸入(如果未提供任何參數):

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"
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM