shell学习三十七天----引用

引用

案例,如果我想输出一个星号(*),使用echo如何做?

echo *

这是肯定不行的,需要将*转移,即:echo \*

这样就引出了引用的概念.所为引用,是用来防止shell将某些你想要的东西解释成不同的意义.如果你希望某些可能被shell视为个别参数的东西保持为单个参数,这时你就必须将其引用.

引用的三种方式:

反斜杠转义

字符前置反斜杠(\),用来告知shell该字符即为其字面上的意义.

单引号

单引号(‘...’)强制shell将一对引号之间的所有字符都看做其字面上的意义.shell脚本会删除这两个引号,只单独留下被括起来的完整文字内容:

命令:echo ‘here are some character * ? ` $ \‘

输出:here are some character * ? ` $ \

不能再一个单引号引用的字符串里再内嵌一个单引号.即使是反斜杠,在单引号里也没有特殊意义(某些系统里,像echo ‘A\tB’这样的命令看起来像是shell特别的处理反斜杠,其实不然,这是echo命令本身有特殊的处理方式)

如需混用单引号和双引号,可以小心的使用反斜杠转义以及不同引用字符串的连接来做到:

命令:echo ‘he said "how‘\‘‘s tricks?"‘

输出:he said "how‘s tricks?"

命令”echo "she replied ,\"movin‘ along\""

输出:she replied ,"movin‘ along"

不管怎么处理,这种结合方式永远是很难阅读的.

双引号

双引号(“...”)就像单引号那样,将括起来的文字视为单一字符串.只不过,双引号会确切的处理括起来文字中的转义字符和变量,算术,命令替换:

x=hahaha

echo “$x”

输出:hahaha

在双引号里,字符$,”,`与\,如需用到字面上的意义,都必须前置\.任何其他字符前面的反斜杠是不带特殊意义的.序列\-newline会完全的被删除,就好像是用在脚本里的正文中一样.

单引号被括在双引号里时就无特殊意义了,他们不必承兑,也不许转移.

命令:echo "hahah‘"

输出:hahah‘

一般来说,使用单引号的时机是希望完全不处理的地方.否则,当希望将多个单词视为单一字符串,但又需要shell为你做些事情,此时使用双引号,例如将一个变量值与另一个变量值连在一起:

oldvar=”$oldvar $newvar”

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-10-13 00:56:30

shell学习三十七天----引用的相关文章

第六章 shell学习之变量和引用

变量 本地变量:类似于局部变量,只在当前shell进程有效 环境变量:适用于所有登录进程所产生的子进程 位置参数:用于向shell脚本传递参数,只读 变量替换和赋值 引用变量值就称为变量替换,$就为变量替换符号,如a为变量名则$a或${a}为变量值 将值赋给某个变量名就称为变量赋值,格式:variable=value或${ variable=value },如值中包含空格则必须用"" 清除变量的值: unset 变量名 设置只读变量: variable=value readonly v

鸟书shell学习(三)shell脚本程序设计要点总结

一 注意事项 1.脚本的开头一行为 : #!/bin/bash 声明这个脚本需要的shell的名称 2.程序中出了"#!"之外的其他以#开头的都是注释内容 3.为了方面的使用系统命令,可以在程序的开始部分设置主要环境变量例如PATH 4.脚本程序的运行方法: sh example.sh 或者类似 bash example.sh chmod +x example.sh ; ./example.sh    ################################ 这两种执行方式都是

shell学习三十四天----printf详解

printf 先来看一个简单的例子:使用命令printf "hello,world\n", 输出:hello,world 再使用echo "hello,world\n",输出为:hello,world\n 案例二:使用命令printf "%s\n" hello,world 输出结果为:hello,world printf命令的完整语法有两个部分: printg format-string [arguments] 第一部分为描述格式规格的字符串,他

shell学习三十天----break,continue,shift,getopts

break和continue 这两个命令分别用来退出循环,或跳到循环体的其他地方. 使用while与break,等待用户登录 bash代码: printf "Enter username: " read user while true do if who | grep "$user" >/dev/null then break; fi sleep 30 done 等待特定用户,每30秒确认一次 true命令什么事也不必做,只是成功的退出.这用于编写无限循环,即

shell学习三十八天----执行顺序和eval

执行顺序和eval shell从标准输入或脚本中读取的每一行称为管道,它包含了一个或多个命令,这些命令被一个或多个管道字符(|)隔开. 事实上嗨哟很多特殊符号可用来分割单个的命令:分号(;),管道(|),&,逻辑AND(&&),逻辑OR(||).对于每一个地区的管道,shell都会将命令分割,为管道设置I/O,并且对每一个命令依次执行下面的操作. 看起来很复杂,但是每一个步骤都是在shell的内存里发生的,shell不会真的把每个步骤的发生演示给我们看.所以这是我们分析shell内

shell学习三十五天----波浪号展开与通配符

波浪号展开与通配符 shell中两种与文件名相关的展开.第一种是波浪号展开,第二种是通配符展开式. 波浪号展开 如果命令行字符串的第一个字符为波浪号(~),或者变量指定(例如PATH或CDPATH变量)的值里任何未被引号括起来的冒号之后的第一个字符为波浪号(~)时,shell变回执行波浪号展开. 波浪号展开的目的,将用户根目录的符号型表示方式,改为实际的目录路径.可以采用直接或间接的方式指定执行此程序的用户,如未明白指定,则为当前的用户: 命令:vi ~/.profile       与vi $

shell学习三十一天----函数问题

函数 案例一: #!/bin/bash hello () { echo "hahahah" } hello 执行函数,结果为:hahaha 案例二: #!/bin/bash funWithReturn() { echo "the function is to get the sum of two number" read -p "input first number" num1 read -p "input second number&

linux shell学习三

Shell for循环 Shell for循环的语法如下所示 for 变量 in 列表 do command1 command2 ... commandN done 举例: for i in {1..100} do echo $i done 类C语言也是可以的 for ((i=1; i<=100; i ++)) do echo $i done Shell while循环 while command do Statement(s) to be executed if command is true

shell学习三十三天----关于重定向

关于重定向 额外的重定向运算符 使用set -C搭配 POSIX shell提供了防止文件意外截断的选项:运行set -C命令可打开shell所谓的禁止覆盖选项,当它再打开状态时,单纯的>重定向遇到目标文件已存在时,就会失败.>|运算符则能够另noclobber选项失效. 提供行内输入的<<和<<-:使用program<<得力miter,能够在shell脚本正文内提供输入数据;这样数据叫嵌入文件.在默认情况下,shell能够在嵌入文件正文内做变量.命令和算数