GNU/Linux >> Znalost Linux >  >> Panels >> Webmin

„Vnořování“ proměnných v bash

Mnohokrát děkujeme „Gavinu Smithovi“ na stackoverflow.com za první část tohoto tipu.

Výrazy jako ${${a}} nefungují. Chcete-li to obejít, můžete použít eval:

b=value
a=b
eval aval=\$$a
echo $aval

Výstup je

value

Díky za tip Gavine!

Dobře, tak proč byste to chtěli?

Pro mě jsem potřeboval otestovat, že určité proměnné byly nastaveny z přiloženého konfiguračního souboru. Pomocí smyčky a výše uvedené techniky vnoření můžeme vzít:

Toto:

if [ "${KIDFILE}" == "" ] ; then
  echo "ERROR - KIDFILE Not Set"
  exit 1
fi

if [ "${KUSER}" == "" ] ; then
  echo "ERROR - KUSER Not Set"
  exit 1
fi

if [ "${KSERVER}" == "" ] ; then
  echo "ERROR - KSERVER Not Set"
  exit 1
fi

if [ "${KRFILE}" == "" ] ; then
  echo "ERROR - KRFILE Not Set"
  exit 1
fi

if [ "${KLFILE}" == "" ] ; then
  echo "ERROR - KLFILE Not Set"
  exit 1
fi

if [ "${KLINK}" == "" ] ; then
  echo "ERROR - KLINK Not Set"
  exit 1
fi

A nahraďte ho elegantnějším:

NEEDVARS="KIDFILE KUSER KSERVER KRFILE KLFILE KLINK"
for MYVAR in ${NEEDVARS}; do
  eval MYVAL=\$${MYVAR}
  if [ "${MYVAL}" = "" ] ; then
    echo "${MYVAR} NOT SET"
    exit 1
  fi
done

Webmin
  1. Prostory pro proměnné ve skriptu Bash?

  2. Funkce v proměnných Shell?

  3. Čtěte řádek po řádku v bash skriptu

  1. Jak nastavit proměnné prostředí Linuxu pomocí Ansible

  2. Jaké je použití $# v Bash

  3. Co dělá `set -x`?

  1. How To Echo A Bang!?

  2. Odesílání simulovaných úhozů v Bash

  3. Jak bash testuje „nepravdu“?