Ho uno script abbastanza semplice che è qualcosa come il seguente:
#!/bin/bash
VAR1="$1"
MOREF='sudo run command against $VAR1 | grep name | cut -c7-'
echo $MOREF
Quando eseguo questo script dalla linea di comando e gli passo gli argomenti, non ottengo alcun output. Tuttavia, quando eseguo i comandi contenuti nella variabile $MOREF
, sono in grado di ottenere l'output.
Come si può prendere il risultato di un comando che deve essere eseguito all'interno di uno script, salvarlo in una variabile e poi mostrare questa variabile sullo schermo?
Oltre ai backtick
potete usare command
$(command)
o "$(command)"
che trovo più facile da leggere, e permettono l'annidamento.
OUTPUT="$(ls -1)"
echo "${OUTPUT}"
MULTILINE=$(ls \
-1)
echo "${MULTILINE}"
Le virgolette ("
) sono importanti per preservare i valori multilinea.
Il modo giusto è
$(sudo run command)
Se stai per usare un apostrofo, hai bisogno di ``, non di `'
. Questo carattere è chiamato "backticks" (o "accento grave").
Come questo:
#!/bin/bash
VAR1="$1"
VAR2="$2"
MOREF=`sudo run command against "$VAR1" | grep name | cut -c7-`
echo "$MOREF"