为什么在使用$ {!variable}时不能将字符串变量作为命令求值?

时间:2019-11-06 03:31:34

标签: bash command-substitution

这与我去年问过的Use substituted string as a command in shell script有关。那个被接受的答案效果很好。

#!/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进行求值了,我该如何正确设置呢?

0 个答案:

没有答案