【问题标题】:Bash variable assignment and command not found [duplicate]找不到Bash变量分配和命令[重复]
【发布时间】:2010-12-15 10:28:03
【问题描述】:

我有一个 shell 脚本,可以让我访问脚本内的全局变量,但是当我尝试创建自己的变量时,它的响应是:找不到命令。

#!/bin/bash
J = 4
FACE_NAME = "eig$J.face"
USER_DB_NAME = "base$J.user"

当我运行上面的脚本时,我得到:

./test1.sh line 2: J: command not found
./test1.sh line 3: FACE_NAME: command not found
./test1.sh line 4: USER_DB_NAME: command not found

有什么想法吗??我在 Windows XP 下使用 Cygwin。

【问题讨论】:

  • 在创建变量时不要在变量名中使用全部大写字母。按照惯例,环境变量(PATH、EDITOR、SHELL、...)和内部 shell 变量(BASH_VERSION、RANDOM、...)完全大写。所有其他变量名称应为小写。由于变量名区分大小写,因此此约定可避免意外覆盖环境变量和内部变量。

标签: bash shell variables cygwin


【解决方案1】:

试试这个(注意我已经删除了=两边的空格):

#!/bin/bash
J="4"
FACE_NAME="eig$J.face"
USER_DB_NAME="base$J.user"

Bash 不喜欢在声明变量时使用空格 - 最好将每个值都引用起来(但这不是必需的)。

【讨论】:

  • 天哪,这太令人沮丧了。那是我的问题。谢谢!
  • 感谢安德鲁·黑尔。刚刚遇到同样令人沮丧的问题!
  • 我真的不明白为什么 bash 不接受空格 :(
  • 我正要向上帝祈祷!泪水……
  • "请注意,我已经删除了 = " 两侧的空格
【解决方案2】:

在其他文本中嵌入变量时,最好使用大括号分隔变量名:

#!/bin/bash
J=4
FACE_NAME="eig${J}.face"
USER_DB_NAME="base${J}.user"

点在这里为您完成了这项工作,但如果那里有其他字符,它可能会被解释为变量名的一部分。

【讨论】:

  • 使用 {} 在文本中间分隔变量是 shell 编程的最佳实践。
  • 这是我的问题!第一个解决方案对我不起作用,但确实如此。
【解决方案3】:

不要在“=”之间留空格

J=4
FACE_NAME="eig${J}.face"
USER_DB_NAME="base${J}.user"

【讨论】:

    猜你喜欢
    • 2014-07-25
    • 2020-10-10
    • 1970-01-01
    • 2013-05-17
    • 1970-01-01
    • 2016-07-20
    • 2017-02-23
    • 2012-06-06
    • 1970-01-01
    相关资源
    最近更新 更多