Bash变量分配中找不到命令错误

我有一个名为test.sh的脚本:

#!/bin/bash
STR = "Hello World"
echo $STR

当我运行sh test.sh我得到了:

test.sh: line 2: STR: command not found

我究竟做错了什么? 我在网上看了极其基础/入门的bash脚本教程,这就是他们说的声明变量的方式...因此,我不确定自己在做什么错。

我在Ubuntu Server 9.10上。 是的,bash位于/bin/bash 。


#1楼

=号周围删除空格:

#!/bin/bash
STR="Hello World"
echo $STR

#2楼

您的‘=‘符号周围不能有空格。

当你写:

STR = "foo"

bash尝试运行带有2个参数(字符串‘=‘和‘foo‘)的名为STR的命令

当你写:

STR =foo

bash尝试运行带有1个参数的STR命令(字符串‘= foo‘)

当你写:

STR= foo

bash尝试在其环境中将STR设置为空字符串的情况下运行命令foo。

我不确定这是否有助于澄清或仅仅是混淆,但请注意:

  1. 第一个命令完全等效于: STR "=" "foo" ,
  2. 第二个与STR "=foo" ,
  3. 最后一个等效于STR="" foo 。

sh语言规范的相关部分,第2.9.1节指出:

“简单命令”是可选变量赋值和重定向的序列,该序列以任何顺序可选地跟随单词和重定向,并由控制操作员终止。

在这种情况下,一个word就是bash将要运行的命令。 任何包含=字符串(在字符串的开头以外的任何位置)不是重定向的,则是变量分配,而不是重定向且不包含=任何字符串,则是命令。 在STR = "foo" , STR不是变量赋值。


#3楼

在交互模式下,一切看起来都很好

$ str="Hello World"
$ echo $str
Hello World

显然! 正如约翰内斯所说,“ =”周围没有空格。 如果‘=‘周围有空格,则在交互模式下,它会给出错误,如`

找不到命令“ str”


#4楼

定义任何变量时,您不必放置任何额外的空格。

例如

name = "Stack Overflow"
// it is not valid, you will get an error saying- "Command not found"

因此,删除空格:

name="Stack Overflow"

它将正常工作。


#5楼

我知道这已经得到了非常高质量的答复。 但是,总之,您不能有空格。

#!/bin/bash
STR = "Hello World"
echo $STR

由于等号周围存在空格而无法正常工作。 如果你要跑步...

#!/bin/bash
STR="Hello World"
echo $STR

会的

来源:SEO技术

原文地址:https://www.cnblogs.com/1994jinnan/p/12203327.html

时间: 2024-10-25 20:38:16

Bash变量分配中找不到命令错误的相关文章

linux 环境下bash脚本中找不到命令

mr.sh: line 1: HADOOP_CMD: command not found mr.sh: line 4: INPUT_FILE_PATH: command not found mr.sh: line 6: OUTPUT_PATH: command not found mr.sh: line 8: fs: command not found Illegal option: / Usage: jar {ctxui}[vfmn0PMe] [jar-file] [manifest-file

Linux系列教程(二十二)——Linux的bash变量

上篇博客我们介绍了bash的一些基本功能,这是我们平时操作最频繁的.本篇博客我们介绍bash的变量,为后面编写shell脚本做铺垫. 1.什么是变量 变量是计算机内存的单元,其中存放的值可以改变. 当 shell 脚本需要保存一些信息时,如一个文件名或者一个数字,就把它放在一个变量里.每个变量都有一个名字,可以根据名字来引用变量. 使用变量可以保存有用信息,使系统获知用户的相关设置,变量也可以保存暂时信息. 2.变量的声明规则 3.变量的分类 4.用户自定义变量的用法 用户自定义变量也就是本地变

其他文本处理命令以及bash变量中的一些字符串的处理方法

其他的文本处理命令: 1.wc 2.cut命令: cut - 在文件的每一行中提取片断 注意:能够被cut修剪的文件或数据内容,一般是具有某种特定格式或结构的文本文件或数据内容: 如 :/etc/passwd 格式:cut [OPTION]... [FILE]... 常用选项: -d, --delimiter=DELIM:指定在实施修剪操作时所使用的字段分隔符号,默认是TAB(空白字符): -f, --fields=LIST:根据指定的字段分隔符号来指定要保留的字段编号列表: LIST可以称为字

#8 bash变量中的字符串处理

一个完整的程序,一般包括4类文件: 二进制文件(可执行文件).头和库文件.帮助文件.配置文件: bash--CLI(命令行接口)的一种 bash同样属于完整的应用程序,也有这四类文件: bash的配置文件: 三类: profile类: 为交互式登录的shell进程实现功能初始化的配置文件: bashrc类: 为非交互式登录的shell进程实现功能启动配置的配置文件: logout类: 为交互式登录的shell进程提供终止及清理类功能的配置文件: shell的类型: 交互式登录的shell: 1.

python中如何使用shell命令, 及python 与shell 中的变量相互通信

1. python中使用shell命令有多种方法,我自己觉得比较好用的是用commands模块: import commands a,b = commands.getstatusoutput("ls -Al") a是退出状态(int类型), b是shell 命令的输出结果 python -> shell: 1.环境变量 import os  var=123或var='123'os.environ['var']=str(var)  #environ的键值必须是字符串   os.sy

java 安装后 不能 java javac 说找不到命令 -bash: javac: command not found

java 安装后 不能 java javac  说找不到命令 -bash: javac: command not found 不是环境变量的问题, 直接cd到java的目录 也不能执行命令 后来发现是因为java是32位的,linux系统是64位的,就会发生此问题 解决办法是安装一个库:sudo yum install glibc.i686 原文地址:https://www.cnblogs.com/wmxl/p/10323055.html

Ubuntu中找不到pip3命令的解决方法

Ubuntu中找不到pip3命令的解决方法 Ubuntu 有 python2 和 python3. 今天使用 Ubuntu 中的 python3 时,想要安装第三方库却发现 pip 指向的是 python2 . 因为记得 Ubuntu 系统默认将 python3 的 pip 命令改成了 pip3 ,于是执行 pip3 -V ,报命令不存在. Round One 在网上搜原因,因为没有安装,遂安装: sudo apt-get install python3-pip 结果还是命令不存在. Round

如果分配给命令的连接位于本地挂起事务中,ExecuteReader 要求命令拥有事务。命令的 Transaction 属性尚未初始化

{System.InvalidOperationException: 如果分配给命令的连接位于本地挂起事务中,ExecuteReader 要求命令拥有事务.命令的 Transaction 属性尚未初始化. 在 System.Data.OleDb.OleDbConnectionInternal.ValidateTransaction(OleDbTransaction transaction, String method) 在 System.Data.OleDb.OleDbConnection.Va

假设分配给命令的连接位于本地挂起事务中,ExecuteReader 要求命令拥有事务。命令的 Transaction 属性尚未初始化

{System.InvalidOperationException: 假设分配给命令的连接位于本地挂起事务中.ExecuteReader 要求命令拥有事务.命令的 Transaction 属性尚未初始化. 在 System.Data.OleDb.OleDbConnectionInternal.ValidateTransaction(OleDbTransaction transaction, String method) 在 System.Data.OleDb.OleDbConnection.Va