shell中引用

本文详细介绍了Shell命令行中关闭特殊字符含义解析的方法,包括使用反斜线转义、单引号和双引号的不同场景及应用实例。通过具体案例展示了如何正确处理命令行参数中的特殊字符。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

引用:
关闭对特殊字符含义的解析处理被称为引用,实现方法有三种:
1. 使用反斜线(\) 转义,单独的反斜线通常用于实现其后字符的引用,当反斜线置于一个普通的字符前,如n和t,所得到的字符串称为转义序列,\n和\t实现换行和tab格式
echo \abs\3输出abs3,普通字符转义当作本意处理

2. 使用单引号('),单引号引起来的所有特殊字符都将失去它们的特殊含义,当作本意来处理
如:echo '<234$*s|n-' 会输出原样
通配符必须使用单引号,双引号或反斜线进行引用处理
如:
grep '[0-9][0-9]*$' test.txt

3. 使用双引号("),双引号禁止了除了$和反引号`以外的所有元字符,所以,双引号引起来的字符串中,$和反引号都将起作用,其他元字符都不会起作用,如:
echo "this is $USER and the date is (`date +%m/%d`) ]"
this is username and the date is (03/10)
即其允许了变量域和命令域的执行,原样显示了其他元字符。
双引号中的反斜线只在下面4个符号之前起作用:$, 反引号`,", \

shell中命令行参数中的一个或多个空格或tab只能算一个
echo hello      world输出hello world
shell中只是简单的以一个空格为间隔来读取参数


例子:
echo hello; world 出现错误,提示world:command not find 分号;告诉shell,已经到了一个命令的最后
echo hello\; world

rm ch* 将删除所有以ch开头的文件
rm ch\*或rm 'ch*'或rm "ch*"可以实现删除名为ch*的文件

echo "ab\nab" 输出ab\nab
printf "ab\nab" 输出:
ab
ab
交给printf的\n使得输出换行,printf命令允许它自己的一些由反斜线定义的特殊字符

注意echo -e时不论是单引号还是双引号中都会解释\n等转义字符
 echo -e "\n"和echo -e '\n'输出换行



shell脚本中,可以使用source命令或者"."来引用其他的shell脚本文件。引用的方式可以是相对路径或者绝对路径。在给出的例子中,main.sh脚本中使用了source命令引用xxutil.sh脚本。当在同一目录下执行main.sh时,没有问题。但是如果在其他目录下执行main.sh时,会出现找不到xxutil.sh文件的错误。 为了解决这个问题,可以使用以下方法来引用shell文件: 1. 获取当前脚本所在的目录:可以使用$0获取当前脚本的路径,然后使用dirname命令获取脚本所在的目录。将获取到的目录赋值给一个变量,比如CURDIR。 2. 判断获取到的目录是否是绝对路径:可以通过判断获取到的目录的第一个字符是否为"/"来判断是否是绝对路径。 3. 根据判断结果来设置CURDIR的值:如果是绝对路径,则直接将获取到的目录赋值给CURDIR;如果是相对路径,则将当前工作目录和获取到的目录拼接起来,赋值给CURDIR。 4. 使用source命令或者"."来引用xxutil.sh脚本:使用$CURDIR/xxutil.sh来指定xxutil.sh脚本的路径。 通过以上方法,可以解决在其他目录下执行main.sh时找不到xxutil.sh文件的问题。 #### 引用[.reference_title] - *1* [shell编程时,引用相对路径的shell文件](https://blog.youkuaiyun.com/xiaojin21cen/article/details/123817597)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值