【问题标题】:"bad variable name" using "read var"使用“读取变量”的“错误变量名”
【发布时间】:2025-11-29 12:25:01
【问题描述】:

我对 Linux shell 感到困惑。可能是我作为 Linux 菜鸟监督了一些显而易见的事情。

我只想运行以下脚本:

#!/bin/bash
echo "Type some Text:"
read var
echo "You entered: "$var

情况如下:

  • 在 Windows 上的 VirtualBox 中安装了 Ubuntu Server 14.04
  • 用这个packages安装它
  • 安装在 /media/buff 上的 SAMBA
  • 脚本位于 /media/buff/ShellScript/test.sh
  • 由“sudo chmod a+x /media/buff/ShellScript/test.sh”制成可执行文件
  • 其余为默认值
  • 我在 windows 上使用 PSPad 来编辑脚本文件

read 关于破折号,但我不明白。 以下是一些变化:

使用 sh 启动

user@Ubuntu:/media/buff/ShellScript$ sh test.sh
Type some Text:
:bad variable nameread var
You entered:

使用 bash 启动:

user@Ubuntu:/media/buff/ShellScript$ bash test.sh
Type some Text:
': Ist kein gültiger Bezeichner.var (means no valid identifyier)
You entered:

将脚本中的Shebang改为“#!/bin/sh”,使用sh启动

user@Ubuntu:/media/buff/ShellScript$ sh test.sh
Type some Text:
:bad variable nameread var
You entered:

我现在在互联网上搜索了几个小时,我认为脚本本身没问题,但是缺少一些环境设置。 我使用“sudo dpkg-reconfigure dash”将 dash 设置为默认 shell(我认为无论如何都是 ubuntu 默认的)

悲伤的熊猫 :)

【问题讨论】:

  • 顺便说一句,如果您阅读了 bash 标签 wiki,这将是 第一件事,它说要检查 在您提出问题之前*.com/tags/bash/info
  • 谢谢。我不知道那些信息页面。错误消息无助于在 google 上查找有关该问题的信息。

标签: bash variables ubuntu server


【解决方案1】:

shell 脚本中的行尾很可能有回车符(CR、'\r'),因此变量试图被读入var\r 而不是var。这就是为什么您的错误消息毫无意义的原因。类似的错误应该look like this:

run.sh: 3: export: [... the variable name]: bad variable name

在您的情况下,bash 会引发错误,因为 var\r 由于回车而对于变量名是非法的,因此它会打印

test.sh: 3: read: var\r: bad variable name

但是\r 跳转到了行首,覆盖了错误信息的开头。

删除行尾的回车,可能使用dos2unix 实用程序。

【讨论】:

  • Notepad++ 完成这项工作:Edit > EOL Conversion > Unix (LF)
【解决方案2】:

这是一个支持 unix 换行符的list of editors

Brackets 有一个 extension 用于换行/行尾支持,它内置在 Notepad++ 中。转到“编辑”选项卡。找到“EOL 转换”并选择 Unix (LF)。 这应该可以完成。

【讨论】: