【问题标题】:Shell script won't run properly when re-assigning variable [duplicate]重新分配变量时,Shell 脚本无法正常运行 [重复]
【发布时间】:2018-09-04 22:02:17
【问题描述】:

所以我有一个 shell 脚本来做一些懒惰的事情,如果目录没有为用户改变。它在下面。本质上,它应该是一个 if 语句,如果用户为目录输入“默认”,它将把它们拉到文件的默认目录。但是,我在第 16 行收到了command not found,这是重新分配语句。

整个if 声明如下:

if [ $directory = "default" ];
then 
    echo Enter your ldap:
    read $ldap
    $directory = "/usr/local/home/google/${ldap}/Downloads"
fi

我也试过不带美元符号……什么都没有。这里发生了什么?刚接触 shell,以前也找不到这个问题。

【问题讨论】:

  • 先考虑清理shellcheck发现的问题
  • 请注意,标记了两个单独的重复项——一个涉及空白,另一个涉及前导 $

标签: linux shell


【解决方案1】:

这就是你应该如何为 shell 中的变量赋值:

directory="/usr/local/home/google/${ldap}/Downloads"
  • 没有美元 ($) 符号。
  • 等号 (=) 周围没有空格。

此外,您应该将变量用双引号 (") 括起来。这样,您可以避免未定义变量、带空格的参数等错误。


这给了我们:

if [ "$directory" = "default" ]
then
    echo "Enter your ldap:"
    read $ldap
    directory="/usr/local/home/google/${ldap}/Downloads"
fi

【讨论】:

  • 不知道空格会影响这一点 - 包括空格以提高可读性。谢谢!
  • @RonanBoiteau,请参阅How to Answer 的“回答好问题”部分,第三个要点,关于“之前已被多次询问和回答”的问题。
猜你喜欢
  • 2021-10-25
  • 1970-01-01
  • 2018-12-27
  • 1970-01-01
  • 2021-05-30
  • 1970-01-01
  • 2011-08-24
  • 1970-01-01
  • 2016-11-05
相关资源
最近更新 更多