shell 使用摘记
1.一直有点搞不清shell里面的判断,反引号,echo。看下面例子,
文件sedTest.yml内容:
server: url: http://testjkweb.tourongjia.com spring: aop: ddsdsd auto: true proxy-target-class: false redis:
代码:
match_flag=echo `grep -q "^spring" "/home/vobile/test/sedTest.yml"` echo `$match_flag|wc -l` if `grep -q "^spring" "/home/vobile/test/sedTest.yml"`; then echo "matching" fi if $match_flag; then echo "match" else echo "not match" fi if [ `grep -q "^spring" "/home/vobile/test/sedTest.yml"` ]; then echo "matched 1" fi if [ $match_flag ]; then echo "matched 2" fi
结果:
1 matching match matched 2
可以看到,if `grep -q "^spring" "/home/vobile/test/sedTest.yml"` 和if $match_flag的结果相同,都能匹配
而 if [ `grep -q "^spring" "/home/vobile/test/sedTest.yml"` ] 和 if [ $match_flag ] 的结果不同, if [ `grep -q "^spring" "/home/vobile/test/sedTest.yml"` ]不能匹配,??
3.if [ ! `grep "^$key" "$CONFIG_FILE_PATH/$path"` ];
这种代码要小心,如果`grep "^$key" "$CONFIG_FILE_PATH/$path"`返回字符串中有空格则会得到不匹配的结果,正确的做法
t=`grep "^$key" "$CONFIG_FILE_PATH/$CONFIG_FILE"` echo $t"aaa" if [ ! "$t" ]; then echo "$CONFIG_FILE_PATH/$CONFIG_FILE不完整,$key项缺失" exit 2 fi
就是字符串要用“”括起来
4. /tmp/$$中字符串是david.test = ${david.test}
for key in $(awk -F "=" '{print $2}' /tmp/$$) ; do echo "key=$key"
结果:${david.test}key,前面空格被忽略了
但换另外一种写法
change_value=`echo $line | awk -F= '{gsub(/^( |\t)*|( |\t)*$/,"",$2);print $2}'` echo "change_value=$change_value"
结果:change_value= ${david.test},表明空格不被省略,看起来是反引号和$符在具体的应用中有所区别
喜欢艺术的码农
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· winform 绘制太阳,地球,月球 运作规律
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人