给出下面列出的变量:
echo ${userupper}_PYTHON
# YTU_PYTHON
echo $YTU_PYTHON
# /home/ytu/anaconda3/bin/python
echo $path
# foo.py
现在,我想用/home/ytu/anaconda3/bin/python foo.py
和userupper
执行path
。我尝试了$(${userupper}_PYTHON) $path
,但最终出现错误消息,包括:
YTU_PYTHON:未找到
foo.py:找不到
似乎$(${userupper}_PYTHON)
只是YTU_PYTHON
而不是预期的$YTU_PYTHON
。我该怎么做才对呢?
编辑:
建议的重复应该已经解决了我的问题。但是由于某些未知原因,它无法正常工作。
#!/usr/bin/env bash
for user in ytu
do
. /home/${user}/.profile
userupper=$(echo ${user} | awk '{print toupper($0)}')
userpython=${userupper}_PYTHON
cd /home/${user}/H2-ML/crons
for path in $(ls | grep ^${user}_.*_monthly_report.py$)
do
echo ${userpython}
echo $path
echo $YTU_PYTHON
echo ${!userpython}
done
done
上面的代码块返回:
YTU_PYTHON
ytu_clinic249_monthly_report.py
/ home / ytu / anaconda3 / bin / python
send_monthly_reports.sh:14:send_monthly_reports.sh:替代错误
,这让我很困惑。
答案 0 :(得分:0)
尝试一下:
command=${userupper}_PYTHON
echo ${!command} $path # ommit echo if you want to execute command
在您的情况下,它回显:
/home/ytu/anaconda3/bin/python foo.py
如果您想编写bash脚本,这里link可能很有用。简而言之,您不应该解析ls
输出。
您还创建了不必要的新流程,两行都做同样的事情:
$(echo ${user} | awk '{print toupper($0)}')
${user^^} #paramenter expansion