![路径中带有变量的脚本](https://linux22.com/image/79558/%E8%B7%AF%E5%BE%84%E4%B8%AD%E5%B8%A6%E6%9C%89%E5%8F%98%E9%87%8F%E7%9A%84%E8%84%9A%E6%9C%AC.png)
我不完全确定在哪里问或如何用正确的术语提出这个问题。
我这里有用于为用户(bukkit)管理游戏(minecraft)服务器的脚本。我删除了一些变量并且我想知道为什么这不起作用以及可能的解决方案。
#!/bin/bash
# /etc/init.d/bukkit
USERNAME='bukkit'
MCROOT='/home/$USERNAME'
MCPATH='/home/$USERNAME/Server'
BACKUPPATH='/home/$USERNAME/backups'
SCRIPTLOG='/home/$USERNAME/script.log'
LOGPATH='/home/$USERNAME/Server/logs'
(line 50) cd $MCPATH
(我也喜欢在其后面的路径中包含 $MCROOT。)
运行脚本给出:
/bin/bukkit: line 50: cd: /home/$USERNAME/Server: No such file or directory
-su: line 0: cd: /home//Server: No such file or directory
关键是在不同的文件中有不同的用户名,我想我可以节省编辑所有路径的时间,通常在代码的其余部分用一个变量替换所有内容。所以我的另一个名为“ftb”的文件有USERNAME='ftb'
"/bin/bukkit" is a symbolic link to "/etc/init.d/bukkit"
祝你今天过得愉快!
答案1
变量不会在单引号内扩展,因此系统正在寻找文字/home/$USERNAME/Server
而不是/home/bukkit/Server
.
如果您使用双引号,您的代码应该可以工作,例如
MCPATH="/home/$USERNAME/Server"
有更详细的讨论环境变量中的单引号和双引号有何意义?