Ja, irgendwas ist hier sehr mysteriös 🙁
Es müßte IMHO etwas mit bc und der MathLib zu tun haben.
Und zwar wird irgendwie die Parametertrennung nicht vollzogen.
Wenn du "bc -l" solo aufrufst, dann kann man beide Varianten eingeben
bc -l
scale=300
4*a(1)
3.141592653589793238462643383279502884197169399375105820974944592307\
81640628620899862803482534211706798214808651328230664709384460955058\
22317253594081284811174502841027019385211055596446229489549303819644\
28810975665933446128475648233786783165271201909145648566923460348610\
454326648213393607260249141272
scale=300; 4*a(1)
3.141592653589793238462643383279502884197169399375105820974944592307\
81640628620899862803482534211706798214808651328230664709384460955058\
22317253594081284811174502841027019385211055596446229489549303819644\
28810975665933446128475648233786783165271201909145648566923460348610\
454326648213393607260249141272
Also Trennung durch Seperator ; oder durch Newline. Wenn aber die Übergabe an stdin durch echo passiert (egal ob durch buil-in echo oder durch /bin/echo), dann wird bei Verwendung der mathLib die Parametertrennung nicht erkannt.
Also ein:
echo "1+1; 2+2" | bc funktioniert. Also irgenwie kein grundsätzliches Problem mit echo und bc. Nur wenn mit -l die MathLib ins Spiel kommt.
Auf einem Debian-Rechner funktioniert es hingegen ohne Probleme.
Noch ein paar Infos:
Debian-version von coreutils(/bin/echo) = echo (GNU coreutils) 5.97
Arch = echo (GNU coreutils) 6.9
Debian:
ldd /usr/bin/bc
linux-gate.so.1 => (0xffffe000)
libreadline.so.5 => /lib/libreadline.so.5 (0x4001e000)
libncurses.so.5 => /lib/libncurses.so.5 (0x4004e000)
libc.so.6 => /lib/tls/i686/cmov/libc.so.6 (0x40090000)
libdl.so.2 => /lib/tls/i686/cmov/libdl.so.2 (0x401c1000)
/lib/ld-linux.so.2 (0x40000000)
Arch:
ldd /usr/bin/bc
linux-gate.so.1 => (0xb7fcb000)
libreadline.so.5 => /lib/libreadline.so.5 (0xb7f82000)
libncurses.so.5 => /lib/libncurses.so.5 (0xb7f40000)
libc.so.6 => /lib/libc.so.6 (0xb7e15000)
libdl.so.2 => /lib/libdl.so.2 (0xb7e11000)
/lib/ld-linux.so.2 (0xb7fcc000)
bc Version ist sowohl bei Debian als auch Arch die 1.06
Es ist IMHO auch kein Shell-Problem, ich habe es sowohl unter bash, sh und zsh versucht.
Ich würde (wenn niemand noch ne Idee hat) gefühlsmäßig 😉 einen Bugreport gegen bc schreiben.
Nachtrag: Auch die Methode über eine Datei geht nicht:
cat /tmp/t
scale(300);
4*a(1)
bc -l /tmp/t
bc 1.06
Copyright 1991-1994, 1997, 1998, 2000 Free Software Foundation, Inc.
This is free software with ABSOLUTELY NO WARRANTY.
For details type `warranty'.
3.14159265358979323844
Hier kommt wenigstens eine Ausgabe, aber scale wird nicht berücksichtigt. Auch andere Notation bzgl. Parametertrennung in /tmp/t funktionieren nicht.
Hth, Gerhard