使用“读取变量”的“变量名错误”

Vap*_*zer 4 variables bash ubuntu server

我对Linux shell感到困惑。可能是我监督了一些明显的Linux noob。

我只需要运行以下脚本:

#!/bin/bash
echo "Type some Text:"
read var
echo "You entered: "$var
Run Code Online (Sandbox Code Playgroud)

情况如下:

  • 在Windows的VirtualBox中安装Ubuntu Server 14.04
  • 与此软件包一起安装
  • 安装在/ media / buff上的SAMBA
  • 该脚本位于/media/buff/ShellScript/test.sh
  • 通过“ sudo chmod a + x /media/buff/ShellScript/test.sh”使其可执行
  • 其余默认
  • 我在Windows上使用PSPad编辑脚本文件

了一些破折号,但我不明白。以下是一些变体:

使用sh启动

user@Ubuntu:/media/buff/ShellScript$ sh test.sh
Type some Text:
:bad variable nameread var
You entered:
Run Code Online (Sandbox Code Playgroud)

使用bash启动:

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

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

user@Ubuntu:/media/buff/ShellScript$ sh test.sh
Type some Text:
:bad variable nameread var
You entered:
Run Code Online (Sandbox Code Playgroud)

我现在在Internet上搜索了几个小时,并认为脚本本身还可以,但是缺少一些环境设置。我使用“ sudo dpkg-reconfigure破折号”将破折号设置为默认外壳(无论如何我还是认为它是ubuntu的默认设置)

熊猫熊猫:)

And*_*eak 6

'\r'在shell脚本的行尾很可能有回车符(CR,),因此该变量正试图读入var\r而不是var。这就是为什么您的错误消息没有意义的原因。类似的错误应如下所示

run.sh: 3: export: [... the variable name]: bad variable name
Run Code Online (Sandbox Code Playgroud)

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

test.sh: 3: read: var\r: bad variable name
Run Code Online (Sandbox Code Playgroud)

但是\r跳转到该行的开头,覆盖错误消息的开头。

可以通过使用dos2unix实用程序来从行尾移走回车。