[英]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.