GNU/Linux >> Linux Esercitazione >  >> Linux

Bash Dynamic (variabile) Nomi di variabili?

Voglio creare dinamicamente una sequenza di stringhe manipolando un array di elementi e creando una procedura aritmetica.

for name in FIRST SECOND THIRD FOURTH FIFTH; do
    $name = $(( $6 + 1 ))
    $name = "${$name}q;d"
    echo "${$name}"; printf "n"
done

Il risultato desiderato sarebbe il seguente per $6 è uguale a .

1q;d
2q;d
3q;d
4q;d
5q;d

Ma ricevo questo errore

reel_first_part.sh: line 18: FIRST: command not found
reel_first_part.sh: line 19: ${$name}q;d: bad substitution
reel_first_part.sh: line 18: FIRST: command not found
reel_first_part.sh: line 19: ${$name}q;d: bad substitution
reel_first_part.sh: line 18: FIRST: command not found
reel_first_part.sh: line 19: ${$name}q;d: bad substitution

Immagino sia qualcosa di semplice. Funzionava quando facevo qualcosa del tipo

FIRST=$(( $6 + 1 ))
FIRST="${FIRST}q;d"

Risposta accettata:

Innanzitutto non può esserci spazio intorno a = nella dichiarazione di variabile in bash .

Per ottenere ciò che desideri puoi utilizzare eval .

Ad esempio uno script di esempio come il tuo :

#!/bin/bash
i=0
for name in FIRST SECOND THIRD FOURTH FIFTH; do
    eval "$name"="'$(( $i + 1 ))q;d'"
    printf '%sn' "${!name}"
    i=$(( $i + 1 ))
done

Stampe :

1q;d
2q;d
3q;d
4q;d
5q;d

Usa eval con cautela, alcune persone lo chiamano male per qualche motivo valido.

declare funzionerebbe anche :

#!/bin/bash
i=0
for name in FIRST SECOND THIRD FOURTH FIFTH; do
    declare "$name"="$(( $i + 1 ))q;d"
    printf '%sn' "${!name}"
    i=$(( $i + 1 ))
done

stampa anche :

1q;d
2q;d
3q;d
4q;d
5q;d

Linux
  1. Utilizzando un riferimento a una variabile di stringa Bash in Sed?

  2. Parentesi singola nell'assegnazione delle variabili Bash?

  3. Linux bash:assegnazione di più variabili

  4. Controlla se esiste una variabile in un elenco in Bash

  5. Il reindirizzamento dell'output del comando a una variabile in bash non riesce

Dichiarazione Bash:sintassi ed esempi

Variabile di esportazione Bash

Bash printf - Come stampare una variabile in Bash

Bash Scripting:variabili spiegate con esempi

Script Bash(I)

Come impostare la variabile d'ambiente in Bash