这与我去年问过的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
进行求值了,我该如何正确设置呢?