Comment définir une variable à la sortie d'une commande dans Bash?


Answers

Mise à jour (2018): la bonne manière est

$(sudo run command)

Vous utilisez le mauvais type d'apostrophe. Vous avez besoin de ` , pas ' . Ce personnage est appelé "backticks" (ou "accent grave").

Comme ça:

#!/bin/bash

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

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

echo "$MOREF"
Question

J'ai un script assez simple qui ressemble à ceci:

#!/bin/bash

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

echo $MOREF

Lorsque j'exécute ce script à partir de la ligne de commande et lui transmets les arguments, je ne reçois aucune sortie. Cependant, lorsque $MOREF les commandes contenues dans la variable $MOREF , je peux obtenir une sortie.

Je voudrais savoir comment on peut prendre les résultats d'une commande qui doit être exécutée dans un script, l'enregistrer dans une variable, puis afficher cette variable à l'écran?




Voici deux autres façons: S'il vous plaît gardez à l'esprit que l'espace est très important dans bash, donc si vous voulez que votre commande soit utilisée telle quelle sans introduire plus d'espaces.

  1. suivant assigne harshil à L, puis l'imprime

    L=$"harshil"
    echo "$L"
    
  2. suit assigne la sortie d'une commande tr à L2. tr est exploité sur une autre variable L1.

    L2=$(echo "$L1" | tr [:upper:] [:lower:])
    



C'est un autre moyen, bon à utiliser avec certains éditeurs de texte qui ne parviennent pas à mettre en évidence tous les codes complexes que vous créez.

read -r -d '' str < <(cat somefile.txt)
echo "${#str}"
echo "$str"



Je connais trois façons de faire:

1) Les fonctions conviennent à de telles tâches:

func (){
ls -l
}

Invoquez-le en disant func

2) Également une autre solution appropriée pourrait être eval:

var="ls -l"
eval $var

3) Le troisième utilise des variables directement:

var=$(ls -l)
OR
var=`ls -l`

vous pouvez obtenir la sortie de la troisième solution de la bonne manière:

echo "$var"

et aussi de manière méchante:

echo $var



Juste pour être différent:

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



Lorsque vous définissez une variable, assurez-vous que vous n'avez PAS d'espaces avant et / ou après le signe = . Littéralement passé une heure à essayer de comprendre cela, en essayant toutes sortes de solutions! Ce n'est pas cool.

Correct:

WTFF=`echo "stuff"`
echo "Example: $WTFF"

Échec avec erreur: (substance: non trouvé ou similaire)

WTFF= `echo "stuff"`
echo "Example: $WTFF"





Related