Hi, 如果有任何想法与我沟通, 请用: lifr_nj 在 msn.com
bash learning
上一篇 /
下一篇 2007-12-19 09:43:39
/ 个人分类:other
这两天读了 Advanced Bash scrīpt Guide和shell 十三问。有一些有意思但以前自己不懂或混淆的东西。记下来如下。
*) local,在函数内部定义有限作用域的变量
> function foo { A=aaa; echo $A; }
> A=bbb; echo $A; foo; echo $A
bbb
aaa
aaa
> function bar { local A=aaa; echo $A; }
> A=bbb; echo $A; foo; echo $A
bbb
abc
bbb
*) {} and ()
{} like a anonymous function
() commands in () will be executed in subshell
> A=aaa; { A=bbb; }; echo $A
bbb
> A=aaa; ( A=bbb; ); echo $A
aaa
*) (())和let,整数计算
> a=1
> ((b=a+1))
> echo $b
2
*) 子进程与父进程的变量访问
1)子进程可以 看到 父进程的变量,因为它有父进程变量的copy
2)子进程不可以 访问 父进程的变量
3)如果要让 子进程 可以访问父进程的变量,那么父进程要export该变量
3)父进程既看不到也不可以访问 子进程的变量。
*) source(或 .) 会在当前进程里执行,就象在命令行输入的一样
*) 管道会以子进程来运行
*) "-"可以替代 “标准输出”或标准输入“
它在管道中特别有用,可以避免管道broken,比如
> echo "xxx" | cat -
注意,"-"是由应用程序解释的(这里是cat),而不是bash
*) 退出码
0表示true,其他都为false
*) CTRL 命令
ctrl+c terminate a foreground job
ctrl+z pause a foreground job
ctrl+d 1) log out. similar to 'exit', 2) EOF, used in inputing HERE doc
ctrl+g bell beep
ctrl+l clear scree. similar to 'clear'
ctrl+s freeze STDIN
ctrl+q resume STDIN
ctrl+u erase a line of input, from cursor to begin point
*) 对${}的扩展
一般来说${varName}是对变量的引用,但bash在此基础上提供了一些对字符串处理的扩展。
替换
1) ${varName/src/dst}是对变量字符串的替换,把第一个src用dst来替换
2) ${varName//src/dst}是对变量字符串的替换,把所有src用dst来替换
子串
${varName:pos}
${varName:pos:len}
${#varName} 取得字符串长度
*) echo的参数
-n 不要换行
-e 可以使用'\'转义
\a bell beep
\n new line
\t tab
\123 octal
\x123 hex
收藏
举报
TAG:
shell
other