Bash 为什么';这段代码不管用吗?设置变量和配置文件

Bash 为什么';这段代码不管用吗?设置变量和配置文件,bash,shell,unix,scripting,configure,Bash,Shell,Unix,Scripting,Configure,我最近刚刚制作了以下脚本: if test -s $HOME/koolaid.txt ; then Billz=$(grep / $HOME/koolaid.txt) echo $Billz else Billz=$HOME/notkoolaid echo $Billz fi if test -d $Billz ; then echo "Ok" else touch $Billz fi 因此,基本上,如果文件$HOME/kooled.txt不存在,则Billz

我最近刚刚制作了以下脚本:

 if test -s $HOME/koolaid.txt ; then
  Billz=$(grep / $HOME/koolaid.txt)
  echo $Billz
  else
 Billz=$HOME/notkoolaid
 echo $Billz
 fi



 if test -d $Billz ; then
  echo "Ok"
 else touch $Billz
fi
因此,基本上,如果文件
$HOME/kooled.txt
不存在,则Billz将设置为$HOME/kooled.txt。然后它成功地创建了该文件

但是,如果我真的创建了koolaid.txt,那么我会得到这个

mkdir: cannot create directory : No such file or directory

任何帮助都将不胜感激

这里有几件事需要解决:

以“shebang”开始脚本,例如:

这样,shell就会知道您希望将其作为Bourne shell脚本运行

此外,脚本顶部的条件不能很好地处理.rm.cfg存在但其中任何地方都不包含斜杠字符的情况。在这种情况下,永远不会设置rbin变量

最后,尝试添加行

ls ~

在顶部,您可以看到shell如何解释平铺字符;这可能就是问题所在。

这里是变量内容和计算内容之间的区别。。。 如果您的变量包含字符串
$HOME/some
-,则需要将其展开以获得
/HOME/login/same
一种危险的方法是
eval

bin=$(grep / ~/.rm.cfg)
eval rbin=${bin:-$HOME/deleted}
echo "==$rbin=="

除非你完全确定你在评估什么,否则不要评估…

-1因为你把垃圾放在我眼里。我不会努力去理解这里的错误,而你也不会在提交之前花一点时间去阅读你的文章。抱歉-非常匆忙-我会清理它!您可能会发现有用且相关。我无法回答该问题,为什么有两个答案,一个被接受?感谢您的快速回复!我现在添加了shebang行。另外,我假设它现在确实有斜杠字符。稍后我将尝试使这一行更加具体,但现在看来,一旦变量被更改,它甚至不会创建我想要的目录。我仍然找不到问题脚本中的“ls~”会发生什么?~z~在做你想做的吗?我还是不明白为什么我的命令不起作用。我现在不想插手eval,尤其是因为我是初学者,正如你所说的那样,这可能很危险?@oOTesterOo因为字符串
$HOME
需要扩展。。。参见我的(工作)示例..谢谢!我现在明白了:)
bin=$(grep / ~/.rm.cfg)
eval rbin=${bin:-$HOME/deleted}
echo "==$rbin=="