Почему строковая переменная не может быть оценена как команда при использовании $ {! Variable}? - PullRequest
0 голосов
/ 06 ноября 2019

Это как-то связано с Использовать замененную строку в качестве команды в скрипте оболочки Я спрашивал в прошлом году. Этот принятый ответ сработал хорошо.

#!/usr/bin/env bash

for user in ytu
do
  cd /home/${user}/H2-Data/crons
  for path in "$user"_*_monthly_report.py
  do
    if [ -e $path ]
    then
      . ../../.profile
      userpython=${user^^}_PYTHON
      echo ${!userpython} $path
    else
      break
    fi
  done
done

Это отголосок, который я ожидал:

/ home / ytu / anaconda3 / bin / python ytu_clinic217_monthly_report.py
/ home / ytu/ anaconda3 / bin / python ytu_clinic226_monthly_report.py

Однако, просто изменив ${user^^}_PYTHON на $YTU_PYTHON, что должно быть точно так же, в этом случае сценарий bash теперь выдает:

ytu_clinic217_monthly_report.py
ytu_clinic226_monthly_report.py

Я даже пытался userpython=/home/ytu/anaconda3/bin/python, но в итоге все так же. Тем не менее, если я echo $userpython, я все еще могу получить / home / ytu / anaconda3 / bin / python в последних случаях.

Интересно, почему не может userpython бытьоценивается больше, просто присваивая переменную явно, и как я могу сделать это правильно?

...