常忘记的特殊字符

shell 中有很多特殊字符,比如表示转义的“\”、表示命令替换的“`”等,其中有些用得少了就很容易忘记,包括某个字符或是某个功能等的用法。以下是本人自己的备忘录,仅供参考。
1、“:”(冒号):等价于"no op",是一个什么也不干的命令, 同shell 内建命令 true 的作用相同。可用来作命令占位符。具体用法如下。

# 1)用在循环中
while : # 同:while true
do
operation
done

# 2)在 if/then 中的占位符
if condition
then : # 什么都不做,引出分支
else
take-some-action
fi

# 3)在参数替换中
: ${HOSTNAME?} ${USER?} ${MAIL?} # 如果有任何一个环境变量没被设置则打印错误信息

# 4)同重定向操作符结合(这只适用于正规文件,而不适用于管道、符号链接等特殊文件)
: > data.xxx
# 清空文件“data.xxx”,同 cat /dev/null >data.xxx,不过不会产生一个新的进程,因
# 为“:”是一个内建命令

2、“?”:除了常用的作为测试操作符、三元操作符,以及用在通配符和正则表达式中以外,还可以用来测试一个变量是否被设置了,用法见上面“:”用于参数替换的情况。
3、“$*”和“$@”:表示引用所有位置参数。
4、“$$”:进程 ID 变量。
5、“(xx; yy; ...)”:在一个子 shell 中运行。由于是在子 shell 中,所以括号中的变量对于外界来说是不可用的。

a=123
(a=233; echo $a) # 233
echo $a # 123

6、“{xx, yy, ...}”:作笛卡尔扩展。其中不允许有空白,除非这个空白被引用或转义。

cat {f1,f2,f3} >combfile # 把 f1、f2 和 f3 连接在一起,并重定向到 comfile 中

cp file.{txt,backup} # 同:cp file.txt file.backup

echo {f1,f2}\ :{\ a," b"," c"} # f1 : a f1 : b f1 : c f2 : a f2 : b f2 : c

7、“{ code block }”:当大括号里面包含代码块时(注意代码块两边要有空格),它相当于创建了一个匿名函数,只是在其中声明的变量在大括号外部也是可见的。此外,它不会像上面的“(xx; yy; ...)”一样会开启一个子 shell。

$ a=123
$ { a=321; } # 注意代码块两边要有空格
$ echo $a # 321

$ cat rpm-check.sh
#!/bin/bash

err_noargs=65
if [ -z "$1" ]; then
echo "Usage: `basename $0` rpm-file"
exit $err_noargs
fi

{
echo "Archive Description:"
rpm -qpi $1 # 查询说明
echo "Archive Listing:"
rpm -qpl $1 # 查询列表
rpm -i --test $1 # 查询rpm包是否可以被安装
success=0
if [ "$?" -eq $success ]; then
echo "$1 can be installed."
else
echo "$1 cannot be installed"
fi
} > "$1.test" # 将查询结果保存到一个文件

echo "Results of rpm test in file $1.test"
exit 0

8、“[i]<>filename”:打开 filename 用来读写,并可选地分配文件描述符 i 给该文件。如果该文件不存在,则会被创建。
9、“\<”、“\>”:正则表达式中的单词边界,如:grep '\<the\>' textfile。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值