Ambil petunjuk dari Autotools: tetap pada penyebut umum terendah dari Bourne dan POSIX shell - mungkin ditambah oleh sed
- jika Anda harus menulis sesuatu yang harus bekerja di mana-mana . Mungkin ada sistem di mana sesuatu rusak, tetapi Anda dapat mengatasi masalah tersebut dengan menulis ulang.
Sebagai contoh, beberapa sistem kuno memiliki masalah dengan kesalahan ekspansi test
, alias [
:
if [ $foo = bar ] ; then...
jadi praktik Autoconf adalah menulis ulang dalam tanda kutip ganda dengan awalan satu karakter, seperti:
if [ x"$foo" = "xbar" ] ; then...
Anda juga bisa menggunakannya di "x$foo"
sini. Penjaga ini terhadap kemungkinan yang $foo
bisa menjadi opsi yang valid untuk test(1)
, dan karena [
merupakan alias untuk test
, itu bisa salah menafsirkan ekspresi. Solusinya adalah mengatur situasi di mana argumen yang tidak diketahui [
selalu dimulai x
, yang artinya tidak dapat memiliki makna khusus [
.
(Autoconf juga merekomendasikan penggunaan test
daripada [
, tetapi saran itu muncul sebagai reaksi terhadap kemungkinan konflik dengan M4 , yang juga digunakan [
dalam sintaksisnya.)
awk adalah POSIX , jadi secara teoritis itu tersedia di mana-mana. Bahkan di Busybox , jadi Anda akan memiliki awk
implementasi bahkan di beberapa sistem Linux tertanam yang sangat ketat. Namun, saya akan kurang terkejut menemukan sistem tanpa awk
dibandingkan sed
. Saya kira itu datang ke kompleksitas: alat sederhana lebih mungkin untuk bertahan hidup triase agresif.
Perl bukan bagian dari standar yang tersebar luas, POSIX atau yang lainnya, jadi Anda tidak dapat mengandalkannya jika Anda tidak mengetahui sebelumnya tentang lingkungan target. Perl tidak diinstal secara default di:
- Cygwin
- FreeBSD dan NetBSD
- Instalasi "minimal" untuk beberapa Linux, termasuk Slackware
- banyak Linux tertanam yang bergantung terutama pada Busybox untuk tanah pengguna mereka
Manual Autoconf memiliki bab tentang pemrograman shell portabel yang seharusnya membantu Anda. Alat bagian terakhir selimut seperti sed
, awk
, dan banyak lainnya.