Mam dość prosty skrypt, który jest czymś takim jak poniższe:
#!/bin/bash
VAR1="$1"
MOREF='sudo run command against $VAR1 | grep name | cut -c7-'
echo $MOREF
Kiedy uruchamiam ten skrypt z linii poleceń i przekazuję mu argumenty, nie otrzymuję żadnych danych wyjściowych. Jednakże, kiedy uruchamiam komendy zawarte w zmiennej $MOREF
, jestem w stanie uzyskać dane wyjściowe.
Jak można pobrać wyniki komendy, która ma być uruchomiona w skrypcie, zapisać je do zmiennej, a następnie wyświetlić tę zmienną na ekranie?
Oprócz backticków
możesz użyć command
$(command)
lub "$(command)"
, które uważam za łatwiejsze do odczytania i pozwalające na zagnieżdżanie.
OUTPUT="$(ls -1)"
echo "${OUTPUT}"
MULTILINE=$(ls \
-1)
echo "${MULTILINE}"
Cytowanie ("
) ma znaczenie dla zachowania wartości wielowierszowych.
Właściwy sposób to
$(sudo run command)
Jeśli zamierzasz użyć apostrofu, potrzebujesz ``, a nie `'
. Ten znak jest nazywany "backticks" (lub "grave accent").
Na przykład tak:
#!/bin/bash
VAR1="$1"
VAR2="$2"
MOREF=`sudo run command against "$VAR1" | grep name | cut -c7-`
echo "$MOREF"