Πώς μπορώ να ορίσω μια μεταβλητή στην έξοδο μιας εντολής στο Bash;

Έχω ένα αρκετά απλό σενάριο που είναι κάτι σαν το ακόλουθο:

#!/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}"

Η εισαγωγική παράθεση (") έχει σημασία για τη διατήρηση των τιμών πολλαπλών γραμμών.

Σχόλια (14)

Ο σωστός τρόπος είναι

$(sudo run command)

Αν πρόκειται να χρησιμοποιήσετε απόστροφο, χρειάζεστε ` ` `, όχι '. Αυτός ο χαρακτήρας ονομάζεται "backticks" (ή "grave accent").

Όπως αυτό:

#!/bin/bash

VAR1="$1"
VAR2="$2"

MOREF=`sudo run command against "$VAR1" | grep name | cut -c7-`

echo "$MOREF"
Σχόλια (4)

Απλά για να είμαστε διαφορετικοί:

MOREF=$(sudo run command against $VAR1 | grep name | cut -c7-)
Σχόλια (0)