Έχω ένα αρκετά απλό σενάριο που είναι κάτι σαν το ακόλουθο:
#!/bin/bash
VAR1="$1"
MOREF='sudo run command against $VAR1 | grep name | cut -c7-'
echo $MOREF
Όταν τρέχω αυτό το σενάριο από τη γραμμή εντολών και του δίνω τα ορίσματα, δεν λαμβάνω καμία έξοδο. Ωστόσο, όταν εκτελώ τις εντολές που περιέχονται στη μεταβλητή $MOREF
, είμαι σε θέση να λάβω έξοδο.
Πώς μπορεί κανείς να πάρει τα αποτελέσματα μιας εντολής που πρέπει να εκτελεστεί μέσα σε ένα σενάριο, να τα αποθηκεύσει σε μια μεταβλητή και στη συνέχεια να βγάλει αυτή τη μεταβλητή στην οθόνη;
Εκτός από τα backticks
μπορείτε να χρησιμοποιήσετε command
$(command)
ή "$(command)"
τα οποία βρίσκω πιο ευανάγνωστα και επιτρέπουν την ένθεση.
OUTPUT="$(ls -1)"
echo "${OUTPUT}"
MULTILINE=$(ls \
-1)
echo "${MULTILINE}"
Η εισαγωγική παράθεση ("
) έχει σημασία για τη διατήρηση των τιμών πολλαπλών γραμμών.
Ο σωστός τρόπος είναι
$(sudo run command)
Αν πρόκειται να χρησιμοποιήσετε απόστροφο, χρειάζεστε ` ` `
, όχι '
. Αυτός ο χαρακτήρας ονομάζεται "backticks" (ή "grave accent").
Όπως αυτό:
#!/bin/bash
VAR1="$1"
VAR2="$2"
MOREF=`sudo run command against "$VAR1" | grep name | cut -c7-`
echo "$MOREF"
Απλά για να είμαστε διαφορετικοί:
MOREF=$(sudo run command against $VAR1 | grep name | cut -c7-)