bash字符串

  引用,用引号“括”起来的字符串。

  将字符串用引号括起来,主要是保护某些特殊字符(如*)不被shell或脚本进上步的解释或扩展。引号分单引号与双引号,两者对字符的保护程度略有差异。
  对双引号中的字符串,$和`和/仍有特殊意义,$可用来指明以变量的值代替"$变量名"所在的位置,`则是用命令执行的输出代替,而/则是转义符,//和/$和/`和/"分别表示/和$和`和"这向个字符。
  而单引号中的字符串,除不能出现单引号(因为表示串引用结束)或/外,其它都被保护。此时显示单引号,可采取先结束前面的串,再用双引号显示一个单引号或用/转义一个单引号,后面再用单引号串。如下例

$echo 'Why can'/''t I write '"'"'s between single quotes'
Why can't I write 's between single quotes

  双引号可以保护命令行参数不被shell分拆或压缩参数值内空白。看下面的脚本及其解释。

variable1="a variable containing five words"
COMMAND This is $variable1 # Executes COMMAND with 7 arguments:
# "This" "is" "a" "variable" "containing" "five" "words"

COMMAND "This is $variable1" # Executes COMMAND with 1 argument:
# "This is a variable containing five words"

variable2="" # Empty.
COMMAND $variable2 $variable2 $variable2 # Executes COMMAND with no arguments.
COMMAND "$variable2" "$variable2" "$variable2" # Executes COMMAND with 3 empty arguments.
COMMAND "$variable2 $variable2 $variable2" # Executes COMMAND with 1 argument (2 spaces).

  需要指出的是,上面提到的引用保护功能,只是对shell或shell脚本而言的,将被保护的串被传给某些命令时,这些命令仍会对某些特殊字符进行扩展或解释。例如:

bash$ grep '[Ff]irst' *.txt
file1.txt:This is the first line of file1.txt.
file2.txt:This is the First line of file2.txt.

  最典型的是echo和sed命令(加参数-e),会对很多的特殊字符自行重新解释或扩展,列表如下:
/n换行
/r回车
/t一个制表符
/v垂直制表符
/b回删
/a响铃
/0xx显示xx编码对应的ASCII字符,当将这种串赋给变量时,要在串首引号前加$符号。
/""
/$$
///

说明,当/后面的字符不是上述字符时,则如果不在串中,则shell会将那个/去掉后传给echo或sed,如果是在串中(无论单或双引号),则/被传给命令。例如:
echo /z # z
echo //z # /z
echo '/z' # /z
echo '//z' # //z
echo "/z" # /z
echo "//z" # /z

echo "/v/v/v/v" # Prints /v/v/v/v literally.
# Use the -e option with 'echo' to print escaped characters.
echo -e "/v/v/v/v" # Prints 4 vertical tabs.

另外,在命令行中,/后加一个空格,会禁止shell根据此空格将串区分不同的参数,这对表达文字名字中含有空格的情况非常有用。
再外,/在命令行或脚本中一行的最后时,起到将两行的内容连在一起作用,这对长的命令行输入有帮助。

  看到这儿,晕了没?:)

  我觉得,要把握对串及转义符的理解,关键在于明了:shell的作用主要表现解析命令行,及变量赋值、表达式计算上,至于其它的则是某个命令特有的功能。用下列做验证

bash$ echo hello/!
bash$ echo "hello/!"
bash$ echo -e x/ty
bash$ echo -e "x/ty"

它们的执行结果分别是什么?好好想想!
hello!
hello/!
xty
x        y

按住鼠标左键,在上面空白处拖动就看到了。结果一样吗?
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值