Kaip nustatyti kintamąjį į "Bash" komandos išvestį?

Turiu gana paprastą scenarijų, kuris yra maždaug toks:

#!/bin/bash

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

echo $MOREF

Kai paleidžiu šį scenarijų iš komandinės eilutės ir perduodu jam argumentus, negaunu jokios išvesties. Tačiau kai paleidžiu komandas, esančias kintamajame $MOREF, galiu gauti išvestį.

Kaip galima paimti komandos, kurią reikia paleisti scenarijuje, rezultatus, įrašyti juos į kintamąjį ir tada išvesti tą kintamąjį į ekraną?

Sprendimas

Be atgalinių ženklų command galite naudoti $(command) arba "$(command)", kurie, mano manymu, yra lengviau skaitomi ir leidžia juos įterpti.

OUTPUT="$(ls -1)"
echo "${OUTPUT}"

MULTILINE=$(ls \
   -1)
echo "${MULTILINE}"

Kabutės (") yra svarbios, kad būtų išsaugotos kelių eilučių reikšmės.

Komentarai (14)

Teisingas būdas yra

$(sudo run command)

Jei ketinate naudoti apostrofą, reikia naudoti `````, o ne `'. Šis simbolis vadinamas "atgaliniu ženklu" (arba "kapo akcentu").

Panašiai:

#!/bin/bash

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

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

echo "$MOREF"
Komentarai (4)

Kad būtų kitoks:

MOREF=$(sudo run command against $VAR1 | grep name | cut -c7-)
Komentarai (0)