使用“read var”的“坏变量名”

时间:2015-10-24 16:24:01

标签: bash variables ubuntu server

我对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默认值)

sadface panda:)

2 个答案:

答案 0 :(得分:5)

在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实用程序删除行末尾的回车符。

答案 1 :(得分:0)

以下是支持unix换行符的list of editors

Brackets有extension用于新行/行尾支持,它内置在Notepad ++中。转到'编辑'标签。查找EOL转化次数'并选择Unix(LF)。 应该完成它。