Soluzione 1:
Il limite imposto dalla shell/OS è di solito uno o duecentomila caratteri.
getconf ARG_MAX
ti darà il limite massimo di input per un comando. Sul sistema Debian attualmente ho un terminale aperto su questo restituisce 131072
che è 128*1024
. Il limite è ridotto dalle tue variabili di ambiente e se la mia memoria mi serve correttamente queste vengono passate nella stessa struttura dalla shell, anche se nella maggior parte dei casi ciò toglierà solo poche centinaia di caratteri. Per trovare un'approssimazione di questo valore eseguire env | wc -c
- questo suggerisce 325 caratteri all'ora corrente su questo login su questa macchina.
È probabile che gli script consentano questa lunghezza completa, ma non è improbabile che altre utilità impongano i propri limiti intenzionalmente o per problemi di progettazione. Potrebbero esserci anche limiti artificiali alla lunghezza di un singolo argomento su una lunga riga di comando e/o alla lunghezza del percorso di un file.
Soluzione 2:
ARG_MAX in effetti limita la dimensione totale della riga di comando e dell'ambiente, ma devi affrontare un'ulteriore limitazione:un argomento non deve essere più lungo di MAX_ARG_STRLEN (che purtroppo è hardcoded per essere 131072).
Vedi https://unix.stackexchange.com/questions/120642/what-defines-the-maximum-size-for-a-command-single-argument
Soluzione 3:
Intendi qual è la lunghezza variabile più lunga? Per capirlo puoi usare la "x" di perl per creare un nome di variabile molto lungo:
VAR=`perl -e 'print "a"x131071'` ; bash a.sh $VAR
Sul mio sistema 131071 funziona:
e la variabile è stampata a 131072 è troppo grande:
VAR=`perl -e 'print "a"x131072'` ; bash a.sh $VAR
bash: /bin/bash: Argument list too long