Solusi 1:
Batas yang diterapkan oleh shell/OS biasanya satu atau dua ratus ribu karakter.
getconf ARG_MAX
akan memberi Anda batas input maksimum untuk suatu perintah. Pada sistem Debian saat ini saya memiliki terminal yang terbuka untuk mengembalikan 131072
ini yaitu 128*1024
. Batasnya dikurangi oleh variabel lingkungan Anda dan jika ingatan saya benar, ini diteruskan dalam struktur yang sama oleh shell, meskipun itu hanya akan menghilangkan beberapa ratus karakter dalam banyak kasus. Untuk menemukan perkiraan nilai ini, jalankan env | wc -c
- ini menunjukkan 325 karakter saat ini pada login ini di mesin ini.
Skrip cenderung mengizinkan panjang penuh ini, tetapi bukan tidak mungkin bahwa utilitas lain akan memaksakan batasan mereka sendiri baik secara sengaja atau melalui masalah desain. Mungkin juga ada batasan artifisial untuk berapa lama argumen individu pada baris perintah yang panjang, dan/atau berapa lama jalur ke file.
Solusi 2:
ARG_MAX memang membatasi ukuran total baris perintah dan lingkungan, tetapi Anda menghadapi batasan tambahan:satu argumen tidak boleh lebih panjang dari MAX_ARG_STRLEN (yang sayangnya dikode keras menjadi 131072).
Lihat https://unix.stackexchange.com/questions/120642/what-defines-the-maximum-size-for-a-command-single-argument
Solusi 3:
Apakah maksud Anda berapa panjang variabel terpanjang? Untuk mengetahuinya, Anda dapat menggunakan "x" perl untuk membuat nama variabel yang sangat panjang:
VAR=`perl -e 'print "a"x131071'` ; bash a.sh $VAR
Di sistem saya 131071 berfungsi:
dan variabel dicetak pada 131072 terlalu besar:
VAR=`perl -e 'print "a"x131072'` ; bash a.sh $VAR
bash: /bin/bash: Argument list too long