GNU v.1.06には次の例があります(行の長さに関する制限を認識しません)。
v=$(bc -l <<<"scale=100;4*a(1)"); echo $v
返品:
3.141592653589793238462643383279502884197169399375105820974944592307\
8164062862089986280348253421170676
この関数の出力からバックスラッシュとキャリッジリターンを削除できますか?または存在しないものを探していますか?
答え1
少なくともGNUでは、環境変数をゼロ値にbc
設定できます。BC_LINE_LENGTH
BC_LINE_LENGTH=0 bc -l <<<"scale=100;4*a(1)"
からman bc
:
BC_LINE_LENGTH
This should be an integer specifying the number of characters in
an output line for numbers. This includes the backslash and
newline characters for long numbers. As an extension, the value
of zero disables the multi-line feature. Any other value of
this variable that is less than 3 sets the line length to 70.
答え2
GNU実装を使用すると、bc
バージョン1.07以降、以下を使用してBC_LINE_LENGTH=0
(DC_LINE_LENGTH=0
GNUの場合dc
)改行を完全に無効にできます。以前のバージョンのGNUの場合(または表示されると予想される数字の最大サイズより大きい値)をbc
使用できます。BC_LINE_LENGTH=9999
BC_LINE_LENGTH=9999 bc -l <<< 'scale=100;4*a(1)'
他の実装では、代わりに次にパイプすることができます。
perl -pe 's/\\\n\z//'
または
sed -e :1 -e '/\\$/{N;s/\\\n//;b1' -e '}'
または
awk '{if (sub(/\\$/, "")) printf "%s", $0; else print}'
または(ゴルフ版):
awk '{ORS=sub(/\\$/,"")?"":RS};1'
ただし、一部のシステムでは、テキストユーティリティが特定の最大値(getconf LINE_MAX
1024バイトほど低い場合があります)よりも大きい行をサポートしていないことに注意してください。