【SHELL】反斜杠解决多个shell实例扩展
本意是想获取代码仓相对路径,代码如下
base_dir=`pwd`
repo forall -c '{
user_dir=$(realpath --relative-to="$base_dir" "$PWD")
echo $user_dir
}'
执行后报错 realpath: '': No such file or directory
分析原因
这个问题的原因是repo forall -c命令在每个仓库中执行一个新的shell实例,这个新的shell实例不会继承当前shell实例的环境变量。所以,虽然在repo forall -c命令之前定义了$base_dir,但是在repo forall -c命令中的shell实例并不能访问到它。
解决这个问题的一种方法是在repo forall -c命令中直接使用$base_dir的值,而不是使用$base_dir变量。可以使用双引号来实现这一点,因为在双引号中的变量会被shell自动扩展。
修改如下:
base_dir=`pwd`
repo forall -c "{
user_dir=\$(realpath --relative-to=\"$base_dir\" \"\$PWD\")
echo \$user_dir
}"
使用了反斜杠(\)来转义特殊字符,以防止它们在repo forall -c命令中被提前扩展。这样,$base_dir和$PWD就会在每个仓库的shell实例中被正确地扩展了。
反斜杠(\)来转义特殊字符
在shell脚本中,反斜杠(\)是一个特殊的字符,被称为转义字符。它的作用是改变紧跟其后的字符的含义。当你在一个字符前面加上反斜杠,shell会将这个字符视为普通字符,而不是特殊字符。
在上面的例子中,反斜杠被用来转义$字符。在shell脚本中,$字符通常用来引用变量。例如,$PWD会被替换为当前工作目录的路径。但是,如果你在$字符前面加上反斜杠,如\$PWD,shell就会把$PWD当作普通的字符串,而不会替换为当前工作目录的路径。
同样,反斜杠也被用来转义双引号(")。在shell脚本中,双引号用来定义字符串。如果你在双引号内部的$字符前面加上反斜杠,如\"$PWD\",那么$PWD就会在每个新的shell实例中被扩展,而不是在当前的shell实例中被提前扩展。
总的来说,反斜杠(\)在shell脚本中用来防止特殊字符被提前扩展,这就是所谓的转义
【SHELL】反斜杠解决多个shell实例扩展的更多相关文章
- sed替换 - 含反斜杠(/)和Shell变量
sed替换 - 含反斜杠(/)和Shell变量 摘自: https://blog.csdn.net/zhenyongyuan123/article/details/6616263 2011年07月19 ...
- Unix Shell中单引号、双引号字符、反斜杠、反引号的使用[转]
在执行shell脚本的时候,shell将会对脚本中的行进行解释,然后执行:对于一些特殊处理的句子,我们可以使用引号或者反斜线来避免shell解释执行之.如下,当在命令行中输入:echo *child. ...
- linux,shell输入反斜杠显示'W'。
linux,shell输入反斜杠显示'W'. solution: 字体必须为"Courier New".
- linux shell中单引号、双引号、反引号、反斜杠的区别
摘自http://www.jb51.net/article/33495.htm 1. 单引号 ( '' ) # grep Susan phonebook Susan Goldberg 403-212- ...
- Shell中单引号、双引号、反引号、反斜杠的区别
1. 单引号 ( '' ) # grep Susan phonebook Susan Goldberg -- Susan Topple -- 如果我们想查找的是Susan Goldberg,不能直接使 ...
- Linux下Shell脚本字符串单引号、双引号、反引号、反斜杠的作用和区别
一.单引号 str='this is a string' 单引号字符串的限制: 单引号里的任何字符都会原样输出,单引号字符串中的变量是无效的: 单引号字串中不能出现单引号(对单引号使用转义符后也不行) ...
- shell脚本中的反引号,单引号,双引号与反斜杠
转自:http://blog.sina.com.cn/s/blog_6561ca8c0102we2i.html 反引号位 (`)经常被忽略,而且容易与单引号弄混.它位于键盘的Tab键的上方.1键的左方 ...
- shell脚本特殊符号——单引号、双引号、反引号、反斜杠
1. 单引号 ( '' ) 被单引号用括住的内容,将被视为单一字串. 2. 双引号 ( " " ) 被双引号用括住的内容,将被视为单一字串.双引号只要求忽略大多数,具体说,括在双 ...
- Shell脚本中的特殊字符(美元符、反斜杠、引号等)作用介绍
Shell中的特殊字符有 1.$ 美元符 2.\ 反斜杠 3.` 反引号 4." 双引号 5.< ,>;,*,?,[,] 下面我一一举列说明 一.$符号 1.echo $? 显示 ...
- sed替换 - 含斜杠(\)和Shell变量
gen_image.bat中的内容如下: FOTARomPacker.exe -i .\_ini\FOTARomPacker.ini -o .\_Output\a.bin @IF %ERRORLE ...
随机推荐
- VSCode 中优雅地编写 Markdown
VSCode 中优雅地编写 Markdown 在 VSCode 中编写 Markdown 有几个无法拒绝的优势,首先是顺手方便,常写代码的同学打开 VSCode 各项功能和快捷键使用的都比较熟练,可以 ...
- gentoo安装gcc出现error: C compiler cannot create executables
安装程序 systemd 过程中,出现了error: C compiler cannot create executables 这类错误,经过检查,由于没有配置本地编译器的结果. 输入命令如下: g ...
- 序列化性能测试:jdk和fastjson
序列化性能测试:jdk和fastjson 我开发一个认证授权框架时,需要添加数据库存储token或者会话,于是想测试使用jdk的blob存储解析快还是存储string的json序列化解析快,从而选择他 ...
- CSS 基础 1 - Block & Inline
CSS 基础 1 - Block & Inline display: inline/block/inline-block/none/flex/grid; block block 元素独占一行, ...
- Asp .Net Core 系列:基于 Swashbuckle.AspNetCore 包 集成 Swagger
什么是 Swagger? Swagger 是一个规范和完整的框架,用于生成.描述.调用和可视化 RESTful 风格的 Web 服务.它提供了一种规范的方式来定义.构建和文档化 RESTful Web ...
- Blazor技术入门
曾写过点儿前后端分离的项目(Vue+.NET Core Web API).WPF和WinForm.因为Blazor不支持小程序的原因(相对于uniapp),所以只是大概知道Blazor可以写Web.P ...
- 高性能利器!华为云MRS ClickHouse重磅推出!
摘要:华为智能数据湖MRS服务即将上线ClickHouse高性能引擎集群,用户只需要几分钟,就可以轻松方便地一键式完成集群部署搭建,快速拥有PB级数据的秒级交互查询分析能力,帮助用户带来极致的性能体验 ...
- 基于GaussDB(DWS)的全文检索特性,了解一下?
摘要:全文检索是在互联网场景下应用非常广泛的特性,搜索引擎.站内搜索.电商搜索等场景下都会使用到,GaussDB(DWS)同样也支持全文检索功能,是基于GIN索引实现的,下面给大家详细介绍一下Gaus ...
- 云图说|华为HiLens云上管理平台 花样管理多种端侧设备
摘要:华为HiLens作为端云协同多模态AI开发应用平台,支持对接和管理多种端侧计算设备,帮助用户开发多模态AI应用并下发到端侧设备,实现多场景的智能化解决方案. 本文分享自华为云社区<[云图说 ...
- 2021年中国DevOps现状调查报告发布!
摘要:为进一步了解和掌握DevOps在中国落地实践的现状和未来发展趋势,中国信息通信研究院依托云计算开源产业联盟,此次联合华为云DevCloud等40余家企业共同发起"2021年中国DevO ...