LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 1586|回复: 2

bash中数字和字符、字符串的使用和区别

[复制链接]
发表于 2003-1-27 10:03:23 | 显示全部楼层 |阅读模式
shell中的变量没有类型之分,
我编了一个test1.sh如下:
[liu@mail shell]$ more test1.sh
#! /bin/bash
i=0
i=$i+100
echo $i //我想打印数字100

i="0"
i=$i+100
echo $i //我想这里应该得到很奇怪的结果

i="0"
i=$i+"100"
echo $i //我想打印字符串100

i='0'
i=$i+'100'
echo $i //不知道''和“”有什么区别

可是结果是:
[liu@mail shell]$ . test1.sh
0+100
0+100
0+100
0+100

我不知道怎样正确使用'',"",以及数字和字符串在shell中如何正确使用才能达到注释说的效果。比如我要进行算术运算怎么办呢?为什么得到是结果不是100而是0+100呢?

我看了
<给初学者的入门知识之一>
<Linux Shell>
还是不很明白

:confused:
发表于 2003-1-27 10:21:46 | 显示全部楼层
Bash中的数字的运算是不能这样写的,应该用$[]或expr等等,另外,''和""在Bash中的作用基本是一样的。
 楼主| 发表于 2003-1-27 11:41:45 | 显示全部楼层
谢谢你!刚开始学什么都不懂!现在知道了3种引号的区别了!
shell中引号的使用方法
shell使用引号(单引号/双引号)和反斜线("\")用于向shell解释器屏蔽一些特殊字符.
反引号(")对shell则有特殊意义.
如:
abc="how are you" (bash/pdksh)
set abc = "how are you" (tcsh)
这个命令行把三个单词组成的字符串how are you作为一个整体赋值给变量abc.
abc1='@LOGNAME,how are you!' (bash/pdksh)
set abc1='$LOGNAME,how are you!' (tcsh)
abc2="$LOGNAME,how are you!" (bash/pdksh)
set abc2="$LOGNAME,how are you!" (tcsh)
LOGNAME变量是保存当前用户名的shell变量,假设他的当前值是:wang.执行完两条命令后,
abc1的内容是LOGNAME, how are you!.而abc2的内容是;wang, how are you!.
象单引号一样,反斜线也能屏蔽所有特殊字符.但是他一次只能屏蔽一个字符.而不能屏蔽
一组字符.
反引号的功能不同于以上的三种符号.他不具有屏蔽特殊字符的功能.但是可以通过他将
一个命令的运行结果传递给另外一个命令.
如:
contents=`ls` (bash/pdksh)
set contents = `ls` (tcsh)

在shell中引号分为三种:单引号,双引号和反引号。
(1)单引号 ‘
由单引号括起来的字符都作为普通字符出现。特殊字符用单引号括起来以后,也会失去原有意义,而只作为普通字符解释。例如:
[liu@mail shell]$ st='$PATH'
[liu@mail shell]$ echo $st
$PATH
可见$保持了其本身的含义,作为普通字符出现。
(2)双引号 “
由双引号括起来的字符,除$、\、’、和”这几个字符仍是特殊字符并保留其特殊功能外,其余字符仍作为普通字符对待。对于$来说,就是用其后指定的变量的值来代替这个变量和$;对于\而言,是转义字符,它告诉shell不要对其后面的那个字符进行特殊处理,只当作普通字符即可。可以想见,在双引号中需要在前面加上的只有四个字符$,\,’和”本身。而对”号,若其前面没有加\,则Shell会将它同前一个”号匹配。
[liu@mail shell]$ st="$PATH"
[liu@mail shell]$ echo $st
/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/usr/X11R6/bin:/root/bin
(3)反引号 `
反引号(`)这个字符所对应的键一般位于键盘的左上角,不要将其同单引号(’)混淆。反引号括起来的字符串被shell解释为命令行,在执行时,shell首先执行该命令行,并以它的标准输出结果取代整个反引号(包括两个反引号)部分。例如:
[liu@mail shell]$ ls
test1.sh  test2.sh
[liu@mail shell]$ st="There are follow files in this folder: `ls`"
[liu@mail shell]$ echo $st
There are follow files in this folder: test1.sh test2.sh
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表