Shell
附加到管道並傳遞?
我有一個簡單的 bash 函式除以兩個數字:
echo "750/12.5" | bc
bc
我想/24
從bc
.就像是:
echo "750/12.5" | bc | echo $1 + "/24" | bc
$1
管道結果在哪裡。PS我意識到我可以做
echo "750/12.5/24" | bc
的更多是關於將文本附加到管道結果的問題。
在最簡單的選項中,這確實附加到管道流:
$ echo "750/12.5" | { bc; echo "/24"; } 60 /24
但是,它有一個意外的換行符,以避免您需要使用 tr:
$ echo "750/12.5" | { bc | tr -d '\n' ; echo "/24"; } 60/24
或者,考慮到命令擴展刪除尾隨換行符的事實:
$ printf '%s' $( echo "750/12.5" | bc ); echo "/24" 60/24
但可能,正確的方法應該類似於:
$ echo "$(echo "750/12.5" | bc )/24" 60/24
要在 bc 中使用,可以這樣寫:
$ bc <<<"$(bc <<<"750/12.5")/24" 2
其中,要獲得合理的浮點數精度應該是這樣的:
$ bc <<<"scale=10;$(bc <<<"scale=5;750/12.5")/24" 2.5000000000
注意需要兩個比例,因為有兩個 bc 實例。
當然,bc 的一個實例只需要一個尺度:
$ bc <<<"scale=5;750/12.5/24"
實際上,您應該考慮的是字元串:
$ a=$(echo "750/12.5") # capture first string. $ echo "$a/24" | bc # extend the string 2
上面關於比例的評論在這裡仍然有效。
我使用
sed
並替換了行尾來實現這一點:echo "my text" | sed 's/$/ more text/'
回報:
my text more text
你的例子:
echo "750/12.5" | bc | sed 's/$/\/24/' | bc