Newsgroup: it.comp.os.linux.iniziare
Titolo: Perché "too many arguments"?

Questo è "pippo.sh":
 
#/bin/sh
sip=`csrutil status`
if [ $sip == "System Integrity Protection status: enabled." ]
then
        echo "SIP è abilitato"
        #csrutil disable
fi
echo $sip
 
Ma se faccio eseguire "pippo.sh"...
 
$ ./pippo.sh
./pippo.sh: line 3: [: too many arguments
System Integrity Protection status: enabled.
 
Perché "too many arguments"? E perché non l'output "SIP è abilitato"?
Immagino che il motivo sia sempre lo stesso, me non lo capisco...
-- 
Per rispondere, togliere -NOSPAM- dall'indirizzo.

 Immagino che il motivo sia sempre lo stesso, me non lo capisco...
 
Mi capita sempre anche a me... :-)
 
if [ "$sip" == ...
 
Tra virgolette, altrimenti la shell espande e
piazza due termini come due cose separate, da
cui "too many..."
 
bye,
 
-- 
 
piergiorgio

il Mon, 4 Jan 2021 21:44:37 +0100
borgob...@SPAM-alice.it (Aladino) ha scritto:
 
| Questo è "pippo.sh":
| 
| [...]
| 
| Perché "too many arguments"? E perché non l'output "SIP è abilitato"?
| Immagino che il motivo sia sempre lo stesso, me non lo capisco...
| -- 
| Per rispondere, togliere -NOSPAM- dall'indirizzo.
 
buonasera,
 
hai provato a dare un'occhiata qui [1] ?
 
potrebbe aiutare a risolvere.
 
[1]
https://stackoverflow.com/questions/13781216/meaning-of-too-many-arguments-error-from-if-square-brackets
 
 
saluti.
 
***
◈  [WinterMute] @ [debian ---> bullseye / testing]  ◈
***
 

il Mon, 4 Jan 2021 21:44:37 +0100
borgob...@SPAM-alice.it (Aladino) ha scritto:
 
| Questo è "pippo.sh":
| 
| [...]
| 
| Perché "too many arguments"? E perché non l'output "SIP è abilitato"?
| Immagino che il motivo sia sempre lo stesso, me non lo capisco...
| -- 
| Per rispondere, togliere -NOSPAM- dall'indirizzo.
 
buonasera,
 
parrebbe si tratti di un annoso problema legato all'utilizzo della parentesi quadra
associata al ciclo if. 


il Mon, 4 Jan 2021 21:54:28 +0100
WinterMute <winte...@cryptolab.nOt> ha scritto:
 
| [...]
 
p.s.: mi scuso per i post multipli ma stasera eternal-september fa un po' le bizze.


 if [ "$sip" == ...
 
OK, grazie. Diciamo che non mi è ancora ben chiara la logica della
programmazione shell. Anzi, sono proprio alle prime armi (ma ho nozioni
di progrmmazione con altri linguaggi).


 ments-error-from-if-square-brackets>
 
Grazie anche a te, ho risolto già con l'input di Piergiorgio. Comunque
l'articolo mi è utile lo stesso.


Addi' 04 gen 2021 20:49:37, Piergiorgio Sartor scrive:

Scusa l'ignoranza, ma che differenza c'e' tra "==" e "=" grazie ciao?
 
-- 
Yoda
 


Con Bash non c'è differenza all'interno del comando "test",
cioè all'interno della parentesi quadra singola:
 
[ espressione ]
 
"espressione" in questo caso è l'uguaglianza:
 
"$sip" == "$ecc_ecc"
 
Potresti scrivere anche:
 
"$sip" = "$ecc_ecc"
 
Di fatto in Bash == e = sono intercambiabili in questo
contesto (cioè in un'espressione condizionale).
 
Ma...
Lo standard POSIX è più stringente di Bash e non accetta
il doppio uguale "==", vuole solo il singolo "=".
 
https://unix.stackexchange.com/questions/382003/what-are-the-differences-between-and-in-conditional-expressions
 
 
In sintesi, meglio usare "=" singolo.

 In sintesi, meglio usare "=" singolo.
 
Direi anche io che e` meglio...
 
bye,
 
-- 
 
piergiorgio

 
 
La shell ha un paio di cose che non
sono troppo evidenti, ma sono rilevanti.
 
Essendo un linguaggio interpretato ed
avendo diversi "livelli", spesso non
risulta chiaro cosa esattamente faccia.
 
Ad esempio:
 
V=/tmp/
echo $V*
 
Espande prima $V in /tmp/ e poi espande
/tmp/* in tutti i file in /tmp
 
bye,
 
-- 
 
piergiorgio