整理最近shell的想法,以免想过之后又忘记。。.
首先还是讲讲引号。单引号强引用,双引号弱引用很好理解。不过这两个引号的使用还是很值得细究的。
双引号仅能够解释`(反单号),$(美元符号)和\(转义符号),应用也与这三者有关。
双引号与反单号使用较频繁,由于反单号用于提示shell需要处理一个命令,结果超过一个字符串,通常都需要用双引号阔住以避免歧义,比如应用在判断式中。
#双引号与\,保留\的转义特性,应用相对简单,这个一般不会理解错。不过对于\应该注意单双引号的区别
单引号将所有特殊含义字符全部取消含义,虽然理解简单,但我刚开始总是搞错,主要是与awk等其他命令组合有关
其他的grep,sed什么的也一样,一般`和\使用不常见,而一旦碰到参数中有$就要多加注意了
首先还是讲讲引号。单引号强引用,双引号弱引用很好理解。不过这两个引号的使用还是很值得细究的。
双引号仅能够解释`(反单号),$(美元符号)和\(转义符号),应用也与这三者有关。
双引号与反单号使用较频繁,由于反单号用于提示shell需要处理一个命令,结果超过一个字符串,通常都需要用双引号阔住以避免歧义,比如应用在判断式中。
#!/bin/bash
#判断文件夹是否为空
[ -z "`ls -A $dir`" ]
#双引号与$,为了避免变量中有空格等,超过一个字符串产生歧义。
#!/bin/bash
#打印变量
nu="2 1"
if [ $nu = "2 1" ]; then
echo $nu
fi
#如果按照上面代码运行,会报错too many arguments,所以通常不管怎样,推荐判断式符号两侧均加上双引号
#双引号与\,保留\的转义特性,应用相对简单,这个一般不会理解错。不过对于\应该注意单双引号的区别
#echo '\'' #‘’必须成对,于是程序等待用户输入另一个‘
#echo "\"" #打印"
单引号将所有特殊含义字符全部取消含义,虽然理解简单,但我刚开始总是搞错,主要是与awk等其他命令组合有关
awk '{print $1}' test.txt
awk "{print $1}" test.txt
这两者输出结果完全不同,前者正常后者异常。由于此处使用的$1是希望作为awk的内置变量的,需要将{print $1}原模原样的作为参数附给awk才能正常输出,而如果用""$1则会被程序的第一个变量值替换,此处为空,所以输出结果为test.txt的每一行。
其他的grep,sed什么的也一样,一般`和\使用不常见,而一旦碰到参数中有$就要多加注意了