bash中的空格

先来看一下 空格在bash中的使用规则:

1.赋值运算时=号两边不能使用空格。

2.命令与选项之间需要空格。

3.管道两边的空格可有可无。

再来看一下各种由于空格导致错误的原因:

1)赋值运算时=号左边有空格

var ="abc"

产生的错误信息为:

var: command not found

这是由于bash在解释该条命令时,var会作为一个命令去在系统的PATH中去寻找。一旦无法找到var这个命令就回提示“找不到var这个命令”,那么后面的语句自然也无法执行。

2)赋值运算时=号右边有空格

var= "abc"

产生的错误信息为:

abc: command not found

这是因为在bash中有这么一条执行命令的方式:var=string command

命令command将得到变量var的值,那么“abc"则会作为一个command被bash解释,那么返回的信息当然是“找不到abc这个命令”。

3)赋值运算时=号左右都有空格。

这种情况与第一种情况相同。

4)命令之间没有使用空格。

常见的有如下几种情况:

【if与[之间没有空格】

if[ -n "abc" ];then echo ok;fi

错误原因:很多人认为[  ]在bash中只是一个判断布尔值的符号。其实[   ]在bash中的作用等同于test,它当然是一个命令。

那么if 是一个独立的命令,[ ]同样也是一个独立的命令。两个命令直接当然要有空格,否则像 if[这样的情况,bash只能理解为是一个整体,因而报错。

【[xxx]其中的参数的两端没有空格】

if ["abc" = "abc" ];then echo ok;fi

错误原因:同样的 bash根本无法理解["abc"是个什么东西。要牢记 [  ]不仅仅是一个符号,而是一个命令。

【[  "abc"="cba" ]其中的参数之间没有空格】

if [ "abc"="abc" ];then echo ok;fi

错误原因:

=两边有空格,是表达式,判断=两边的值是否相等,返回一个bool值.

=两边缺少空格,bash则会将"abc"="cba"看做一个整体,它始终返回为真。

至于管道,虽然|两边空格可有可无,但为了美观,一般还是保留两边的空格的。

时间: 2024-10-03 23:14:52

bash中的空格的相关文章

git bash中带空格的文件夹以及文件的处理

空格用'\ '表示,输入的时候,是不需要单引号的 total 338drwxr-xr-x 9 Administ Administ 4096 Aug 24 23:53 HDTHelperdrwxr-xr-x 1 Administ Administ 4096 Oct 25 03:15 HDTTestsdrwxr-xr-x 11 Administ Administ 4096 Sep 15 00:14 HDTUninstallerdrwxr-xr-x 1 Administ Administ 4096 M

Bash中的数学扩展

Bash只支持整数运算,不支持浮点运算.如果需要进行浮点运算,需要使用bc程序.Bash中的数学扩展有两种形式:$[ expression ]或$(( expression )) 例子:$echo $[5+4-2]7 $echo $[ 5*(6-2) ]20 var1=100var2=50var3=45var4=$((var1*(var2-var3))) #注意:圆括号里不需要加$了,和数学运算一样,推荐用这种方式$echo $var4 也可以使用程序/usr/bin/expr来进行整数运算$e

Shell 处理文件名中包含空格的文件

最近在学Gradle, 使用git clone 命令下载了一些资料,但是文件名含有空格,看上去不是很舒服,因此想到用shell脚本对其进行批处理,去掉文件名中的空格,注意这里是把所有的空格全去掉 git clone https://github.com/waylau/Gradle-2-User-Guide-Demos.git Shell脚本: ######################################################################### # F

bash中的算术运算

bash中的算术运算: 操作符+.-.*./.% declare: -i:整型变量 -x:环境变量,类似于export 1.let:进行算术运算,格式为let varName=算术表达式 如果计算结果为小数,小数部分被省略. 如:let sum=4+1,结果为5 echo $sum let s=16/3,结果为5 echo $s 2.varName=$[算术表达式] 3.varName=$((算术表达式)) 4.varName=`expr $num1 + $num2`,注意+好前后要有空格,否个

Bash中${}的用法和变量的间接引用

在bash中${}用于设置变量默认值和字符串取值切片以及变量的间接引用,详细用法如下图,在Centos6下字符串取子${STR:POSITON:LENGTH},LENGTH为负数会报错. 1.${VAR},取出变量VAR值 [[email protected] ~]# a=hjks [[email protected] ~]# echo ${a} hjks 2.${VAR:-DEFAULT},VAR没有定义或者为空则输出$DEFAULT的值(VAR不变) [[email protected] ~

Bash中的位置参数和特殊参数

#Bash中的位置参数和特殊参数 #Bash中的位置参数是由0以外的一个或多个数字表示的参数.#位置参数是当Shell或Shell函数被引用时由Shell或Shell函数的参数赋值,并且可以使用Bash的内部命令set来重新赋值.位置参数N可以被引用为${N},或当N只含有一个数字时被引用为$N # $ set 1 2 3 four five six 7 8 9 ten# $ echo "$1 $2 $3 $4 $5 $6 $7 $8 $9 ${10}"# 1 2 3 four fiv

Bash中简单算术运算的总结

Bash中执行算术运算有很多种实现方式,下面总结如下: Bash内建的let命令 let varName=expr      举例: n1=3 n2=4 let sum=n1+n2 n3=2 n4=10 n5=5 let n1++ let n2+=4 let sum=\(\(n1+n2\)*n5\)*(n4-n3) 表达式中有括号的,要对括号进行转义,尤其是表达式中运算操作符右边的括号! $[expr] varName=$[expr]     举例: n1=3 n2=4 sum=$[n1+n2]

[转帖]bash中(),{},(()),[],[[]]的区别

https://www.cnblogs.com/marility/p/7259821.html 差之毫厘谬以千里 需要仔细认真 前言:在bash中遇到各种括号,同时在进行字符数值比较判定时,总是不断出现问题,于是通过参考<advanced bash-scripting guide>,同时在centos 6.7版本上进行测试,现况总结如下.如有纰漏,望指正. 一.() 一个命令组合,相当于一个命令组 [[email protected]~chunlanyy testdir]# I=123;(I=

bash中 2&gt;&amp;1 &amp; 的解释

1.首先,bash中0,1,2三个数字分别代表STDIN_FILENO.STDOUT_FILENO.STDERR_FILENO,即标准输入(一般是键盘),标准输出(一般是显示屏,准确的说是用户终端控制台),标准错误(出错信息输出). 2.输入输出可以重定向,所谓重定向输入就是在命令中指定具体的输入来源,譬如 cat < test.c 将test.c重定向为cat命令的输入源.输出重定向是指定具体的输出目标以替换默认的标准输出,譬如ls > 1.txt将ls的结果从标准输出重定向为1.txt文本