- 论坛徽章:
- 0
|
本帖最后由 demoyy 于 2011-06-09 20:10 编辑
1、
abs里面是这样说的:
() 命令组.如:
1 (a=hello;echo $a)
注意:在()中的命令列表,将作为一个子shell来运行.
在()中的变量,由于是在子shell中,所以对于脚本剩下的部分是不可用的.
如:
1 a=123
2 ( a=321; )
3
4 echo "a = $a" # a = 123
5 # 在圆括号中a变量,更像是一个局部变量.
我在suse10下面 运行了下 echo $$ ;(echo $$) 但是结果是相同的,按上面说的()这个里面的命令是作为一个子shell来运行的,两个出来的结果是不相同的才对撒。- MNSDB02:~ # echo $$;(echo $$)
- 19215
- 19215
复制代码 2、
33 hello="A B C D"
34 echo $hello # A B C D
35 echo "$hello" # A B C D
36 # 就象你看到的echo $hello 和 echo "$hello" 将给出不同的结果.
37 # ^ ^
38 # Quoting a variable preserves whitespace.
38 # 引用一个变量将保留其中的空白,当然,如果是变量替换就不会保留了.
17 a=`ls -l` # 把ls -l的结果给a
18 echo $a # 别忘了,这么引用的话,ls的结果中的所有空白部分都没了(包括换行)
19 echo
20 echo "$a" # 这么引用就正常了,保留了空白
我在suse10环境下测试了下,结果是 引用变量是会保留变量中的空白和换行的,替换变量是会保留空白,但不保留换行。这个难道跟shell的版本有关?- MNSDB02:~ # a="a b cd"
- MNSDB02:~ # echo $a
- a b cd
- MNSDB02:~ # echo "$a"
- a b cd
- MNSDB02:~/test # ls
- test.cap test1.cap test2.cap test2.txt test3.cap
- MNSDB02:~/test #
- MNSDB02:~/test #
- MNSDB02:~/test # a=`ls -l`
- MNSDB02:~/test # echo $a
- total 340 -rw-r--r-- 1 root root 5750 Jun 9 06:43 test.cap -rw-r--r-- 1 root root 134157 Jun 9 06:43 test1.cap -rw-r--r-- 1 root root 65078 Jun 9 06:43 test2.cap -rw-r--r-- 1 root root 69391 Jun 9 06:42 test2.txt -rw-r--r-- 1 root root 65546 Jun 9 06:43 test3.cap
- MNSDB02:~/test # echo "$a"
- total 340
- -rw-r--r-- 1 root root 5750 Jun 9 06:43 test.cap
- -rw-r--r-- 1 root root 134157 Jun 9 06:43 test1.cap
- -rw-r--r-- 1 root root 65078 Jun 9 06:43 test2.cap
- -rw-r--r-- 1 root root 69391 Jun 9 06:42 test2.txt
- -rw-r--r-- 1 root root 65546 Jun 9 06:43 test3.cap
- MNSDB02:~/test #
复制代码 |
|