有人能帮我一下么?关于echo输出时,双引号问题

sh/bash/dash/ksh/zsh等Shell脚本
回复
头像
if0else1
帖子: 94
注册时间: 2010-01-04 16:48

有人能帮我一下么?关于echo输出时,双引号问题

#1

帖子 if0else1 » 2010-01-10 17:41

有人能帮我一下么?shell的问题! 在echo的时候,什么时候应该加"",什么时候可以不加呢?标准是什么?为什么不加“”一样能输出字符串比如:echo "name is:"$name
echo "name is:$name" 也一样能正常显示。。。Shell不是那么严谨么?

是否在输出变量时候需要将变量放在引号外面?还是不需要……
标准的是怎么个写法呢? :em06
人生没有if...else
头像
ebok
帖子: 852
注册时间: 2008-02-15 0:09

Re: 有人能帮我一下么?关于echo输出时,双引号问题

#2

帖子 ebok » 2010-01-10 17:53

请看《advanced bash scripting guide》
Somebody think they are full of niubility, so they play a zhuangbility, but only reflect their shability.
billbear
帖子: 3681
注册时间: 2008-05-03 23:42

Re: 有人能帮我一下么?关于echo输出时,双引号问题

#3

帖子 billbear » 2010-01-11 15:21

代码: 全选

billbear@ubuntu-pc:~$ a=*
billbear@ubuntu-pc:~$ echo $a
Desktop Documents Downloads Music Pictures Public Templates Videos
billbear@ubuntu-pc:~$ echo '$a'
$a
billbear@ubuntu-pc:~$ echo "$a"
*
billbear@ubuntu-pc:~$ 
头像
if0else1
帖子: 94
注册时间: 2010-01-04 16:48

Re: 有人能帮我一下么?关于echo输出时,双引号问题

#4

帖子 if0else1 » 2010-01-11 16:09

if0else1@I0E1:~$ a="123"
if0else1@I0E1:~$ echo $a
123
if0else1@I0E1:~$ echo "$a"
123

总是觉得shell的输出怪怪的!
可以加引号也可以不加引号。。。这可能和习惯有联系

单引号是原样输出,这个已经了解,呵呵,谢谢楼上阿
人生没有if...else
头像
xzap
帖子: 256
注册时间: 2006-08-24 21:25

Re: 有人能帮我一下么?关于echo输出时,双引号问题

#5

帖子 xzap » 2010-01-11 21:11

标准解释双引号就是
“为了包含文字或者函数段. 除了本身,反引号内的函数,$开头的变量和\开头反转换的字符外, 其余都是直接输出.”


用一个echo体现不出什么的。但是echo加双引号至少可以这样用可以输出换行什么的特殊字符。

代码: 全选

echo "dsdd
asdasds
asdas
asd"
还有就是在用管道的时候有什么有一些特殊字符,空格什么的,双引号也是必须的。
比如

代码: 全选

i="123    123"
echo $i
#显示的是 123 123
echo "$i"
#显示的是 123    123 这个就比较正确了
echo $i|wc
 #     1       2       8
echo "$i"|wc
  #   1       2      11
发现自己真无聊,呵呵。至于具体什么时候该用"",什么时候可以不用,我建议尽量多用""。除非像3楼这样的特殊情况。打两个分号很简单的,但是可以避免很多的问题。比如压缩空格这样的小问题。有的时候在脚本里出错了,还不知道哪里出错了。
随便说些一些不成熟的看法。
王老五
帖子: 2
注册时间: 2009-11-06 22:10

Re: 有人能帮我一下么?关于echo输出时,双引号问题

#6

帖子 王老五 » 2010-01-18 21:14

给你举个例子,列举一下本机的USB,然后给变量test,然后使用echo显示变量,你会发现,带不带双引号的区别了。

代码: 全选

@ubuntu:~$ test=`lsusb`
@ubuntu:~$ 
@ubuntu:~$ echo $test
Bus 005 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub Bus 004 Device 002: ID 0ac8:301b Z-Star Microelectronics Corp. ZC0301 Webcam Bus 004 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub Bus 003 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub Bus 002 Device 002: ID 04f2:0210 Chicony Electronics Co., Ltd Bus 002 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
@ubuntu:~$ 
@ubuntu:~$ 
@ubuntu:~$ echo "$test"
Bus 005 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 004 Device 002: ID 0ac8:301b Z-Star Microelectronics Corp. ZC0301 Webcam
Bus 004 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 003 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 002 Device 002: ID 04f2:0210 Chicony Electronics Co., Ltd 
Bus 002 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
@ubuntu
回复