Shell

附加到管道並傳遞?

  • October 21, 2020

我有一個簡單的 bash 函式除以兩個數字:

echo "750/12.5" | bc

bc我想/24bc.

就像是:

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

引用自:https://unix.stackexchange.com/questions/360540