bash中的字符串引用是一件很简单的事情,我们大多数人对此看一眼就能明了,但是今天这个技巧,也许能够帮你在未来节省不少时间。 引用符包括 “(双引号)和 ' (单引号),最基本的用法就是引用字符串。...,我们经常遇到问题的地方是在处理文件名中有空格的文件时。...当我们需要访问一些单词的时候,如何避免被转义字符所影响。例如:a="hello \"there big\" world" #!.../bin/bash a="hello \"there big\" world" for i in $a do echo $i done 程序的输出和我们希望的不太一样,解决的办法是使用eval,...、双引号引用的时候,一般就不会出问题了。
问: 当范围由变量给出时,如何在Bash中遍历这一范围内的数字?...我知道我可以这样做(在 Bash 文档中称为“序列表达式”): for i in {1..5}; do echo $i; done 它会输出: 1 2 3 4 5 然而,我该如何用变量替换范围的任意一个端点呢...$END}; do echo $i; done 这会输出: {1..5} 答: 提问者代码不起作用的原因是花括号扩展在任何其他扩展之前执行,且其他扩展中具有特殊含义的任何字符都会在结果中保留下来。...这是一种严格的文本处理。Bash 不会对扩展的上下文或者花括号之间的文本应用任何语法解释。...相关阅读: 如何用Bash遍历文本文件的每一行 如何将一个大的文本文件拆分为行数相等的小文件 在bash中:-(冒号破折号)的用法 在Bash中如何从字符串中删除固定的前缀/后缀
更多好文请关注↑ 问: 我想从字符串中删除前缀/后缀。例如,给定: string="hello-world" prefix="hell" suffix="ld" 如何获得以下结果?...如果模式与 parameter 扩展后的值的开始部分匹配,则扩展的结果是从 parameter 扩展后的值中删除最短匹配模式(一个 # 的情况)或最长匹配模式(## 的情况)的值 ${parameter...如果模式与 parameter 扩展后的值的末尾部分匹配,则扩展的结果是从 parameter 扩展后的值中删除最短匹配模式(一个 % 的情况)或最长匹配模式(%% 的情况)的值。...https://www.gnu.org/software/bash/manual/bash.html#Shell-Parameter-Expansion 相关阅读: 在bash中:-(冒号破折号)的用法...在Bash中如何将字符串转换为小写 在shell编程中$(cmd) 和 `cmd` 之间有什么区别 如何从Bash变量中删除空白字符 更多好文请关注↓
--------------------------------------- Java中数据类型的分类: 基本数据类型:4类8种。...注意:字符串、Lambda这两种引用数据类型后面会学习到。 --------------------------------------- Java中如何使用引用数据类型中的类呢?...在Java 9 或者更早版本中,除了8种基本数据类型,其他数据类型都属于引用数据类型。...如果希望使用引用类型中的“类”,那么典型用法的一般步骤为: 例如:使用Java中JDK已经写好的扫描器类 Scanner。 步骤1:导包。 指定需要使用的目标在什么位置。...导入到类的级别。
问: 如何从Bash脚本本身中获得其所在的目录? 我想使用Bash脚本作为另一个应用程序的启动器。我想把工作目录改为Bash脚本所在的目录,以便我可以对该目录下的文件进行操作,像这样: $ ....但是在以相对路径的方式去执行脚本时,获取的目录信息是相对路径,不能满足其他需要获取绝对路径的场景。 如果要获取绝对路径,可以使用如下方法: #!.../usr/bin/env bash script_dir=$(cd -- "$( dirname -- "${BASH_SOURCE[0]}" )" &> /dev/null && pwd) echo...: [$(dirname $(realpath "$0") )]" 参考: stackoverflow question 59895 相关阅读: 在shell编程中$(cmd) 和 `cmd` 之间有什么区别.../(点-斜杠),以便在bash中运行它 shell脚本对编码和行尾符敏感吗
所以我期望 ${len} 的结果为 '2'。然而,它打印的是 '1'。原因是它将 find 命令的所有结果视为一个元素。我该如何修复这个问题?...每次执行 read 语句时,都会从标准输入中读取以 null 分隔的文件名。-r 选项告诉 read 不要处理反斜线字符。-d $'\0' 告诉 read 输入将以 null 分隔。...由于我们省略了要读取的名称,shell 将输入放入默认名称:REPLY。 3. 语句 array+=("$REPLY") 将新文件名附加到数组 array 中。 4....参考文档: stackoverflow question 23356779 man bash man find 相关阅读: 如何批量删除名字乱码的空白文件 如何通过一个Bash定界符来分割一个字符串...如何将Bash数组的元素连接为分隔符分隔的字符串 如何在Bash中连接字符串变量 更多好文请关注↓
在本教程中,您将发现如何归一化和标准化序列预测数据,以及如何确定哪些用于输入和输出变量。 完成本教程后,您将知道: 如何在Python中归一化和标准化序列数据。...如何为输入和输出变量选择适当的缩放比例。 缩放序列数据的实际问题。 让我们开始吧。 ?...中缩放系列数据 您可能需要考虑的系列有两种缩放方式:归一化和标准化。...如果数值很小(接近0-1)且分布有限(例如,接近1的标准偏差),那么也许你可以不缩放这个序列。 其他输入 问题可能很复杂,如何最大限度地扩展输入数据可能不清楚。...如果您的问题具有多个级数,请将其视为单独的变量,然后分别进行扩展。 在适当的时间缩放。在正确的时间应用任何缩放变换很重要。例如,如果您有一系列不稳定的数量,则可能会在首次使数据静止后进行缩放。
/passwd:root:x:0:0:root:/root:/bin/bash /etc/group:root:x:0: 输出文件/etc/passwd中以/bin/bash结尾的行: [root@centos7...:/bin/bash 注意以上两个例子中PATTERN被双引号引用起来以防止被shell解析。...:/root:/bin/bash learner:x:1000:1000::/home/learner:/bin/bash 使用扩展正则表达式意味着不需要转义就能表示字符的特殊含义,包括?...和--include=GLOB分别表示排除和包含匹配GLOB的文件,GLOB表示通配符(find及xargs用法见基础命令介绍三): [root@centos7 temp]# find ..../bin/bash [root@centos7 temp]# grep强大的过滤能力来自于各种选项以及正则表达式的配合,在今后的文章中还有更多的例子。
在Bash 脚本中比较字符串的需求相对普遍,可用于在继续执行脚本的下一部分之前检查某些条件。 字符串可以是任何字符序列。...在本教程中,我们将向您展示如何在Linux 系统上比较Bash 脚本中的字符串,我们将在一个简单的 if/else Bash 脚本的上下文中展示这一点,这样您就可以看到在开发脚本时测试这种情况是如何工作的...在本教程中,您将学习: 如何在 Bash 中比较字符串 比较字符串的 if/else Bash 脚本示例 Bash 脚本:字符串比较示例 例1 在 Bash 脚本中,您通常会将一个或两个字符串存储为变量...总结 在本教程中,我们了解了如何在 Bash 脚本中比较字符串,尤其是在 Bash 脚本的上下文中if/else。...当然,此功能可以扩展到更健壮的脚本,这些脚本可以读取用户的输入或使用 case 运算符等。这些都是在 Bash 中比较字符串所需的所有比较方法。
因为 Unix 早期有一个/etc/glob文件保存通配符模板,后来 Bash 内置了这个功能,但是这个名字被保留了下来。 通配符早于正则表达式出现,可以看作是原始的正则表达式。...Bash 接收到命令以后,发现里面有通配符,会进行通配符扩展,然后再执行命令。...Bash 扩展通配符的时候,发现不存在匹配的文件,会将通配符原样输出。 # 不存在 r 开头的文件名 $ echo r* r* 上面代码中,由于不存在r开头的文件名,r*会原样输出。...或*这样的通配符,不能匹配路径分隔符(/)。 如果要匹配子目录里面的文件,可以写成下面这样。 $ ls */*.txt (4)可用于文件名。 Bash 允许文件名使用通配符。...这时,引用文件名的时候,需要把文件名放在单引号里面。 $ touch 'fo*' $ ls fo* 上面代码创建了一个fo*文件,这时*就是文件名的一部分。
公司项目引用了一个依赖jar,配置封装太封闭了,不能扩展。业务变动一次那个jar就要跟着升级一次,而且不同的项目还引用了这个jar的不同版本。...领导问我能不能给它搞成可扩展的,研究了一下,实现了可扩展定制化。...原本的配置类似是这样的: @Configuration(proxyBeanMethods = false) public class MyConfiguration { /** *...这样ConfigBean的初始化生命周期也变成了 发现Config对象-> 修改Config对象-> 初始化ConfigBean 于是我定义了一个可以修改Config对象的接口: @FunctionalInterface...我们在封装组件的时候要合理利用这些策略,该开口子的要开口子,不该开放的保持封闭,另外保证组件的扩展性也是很重要的。好了今天的分享就到这里,请多多关注:码农小胖哥,请点赞、转发、再看、分享。
pytest 如何在扩展的插件中修改日志格式 pytest 日志格式配置 如何在插件或者代码运行时修改日志格式 pytest 日志格式配置 Pytest 支持通过配置的方式修改日志格式,查看 pytest...我碰到的一种场景是,我们自己开发了一个集成了实际业务场景的pytest插件pytest-XXX,这个对接了几十个测试项目,现在想要修改测试报告中的日志格式。...如果按照官方的配置进行修改的话,那么需要修改N多项目,并且无法保证没有修改遗漏,并且以后新增的项目也需要增加这个配置。 那么如何在插件中修改pytest的日志格式呢?...知道了原理之后,那么我们就可以在加载我们插件(pytest-XXX)的地方,动态修改pytest注册的logging插件中的日志输出格式配置。...handler 格式如何,最终的日志格式都会被修改为我们预期的格式。
但现在,因为$不能使用了,所以我们无法构造PHP中的变量。 所以,如何解决这个问题?...此时我想到了两个有趣的Linux shell知识点: shell下可以利用.来执行任意脚本 Linux文件名支持用glob通配符代替 第一点曾在《 小密圈里的那些奇技淫巧 》露出过一角,但我没细讲。....或者叫period,它的作用和source一样,就是用当前的shell执行一个文件中的命令。比如,当前运行的shell是bash,则. file的意思就是用bash执行file文件中的命令。...但我们要执行的文件仍然排在最后,但我发现这三个文件名中都不包含特殊字符,那么这个方法似乎行不通了。 继续阅读glob的帮助,我发现另一个有趣的用法: ?...就跟正则表达式类似,glob支持利用[0-9]来表示一个范围。 我们再来看看之前列出可能干扰我们的文件: ? 所有文件名都是小写,只有PHP生成的临时文件包含大写字母。
但现在,因为$不能使用了,所以我们无法构造PHP中的变量。 所以,如何解决这个问题?...此时我想到了两个有趣的Linux shell知识点: 1.shell下可以利用.来执行任意脚本 2.Linux文件名支持用glob通配符代替 第一点曾在《 小密圈里的那些奇技淫巧 》露出过一角,但我没细讲...或者叫period,它的作用和source一样,就是用当前的shell执行一个文件中的命令。比如,当前运行的shell是bash,则. file的意思就是用bash执行file文件中的命令。...但我们要执行的文件仍然排在最后,但我发现这三个文件名中都不包含特殊字符,那么这个方法似乎行不通了。 继续阅读glob的帮助,我发现另一个有趣的用法: ?...就跟正则表达式类似,glob支持利用[0-9]来表示一个范围。 我们再来看看之前列出可能干扰我们的文件: ? 所有文件名都是小写,只有PHP生成的临时文件包含大写字母。
背景 最近处理一个 bug 很有意思,有客户反馈某个配置文件解析失败了,出错的那行的内容就只有一个字母 a。 最开始以为是谁改动了处理的脚本,但要到了问题代码中的脚本,比较发现跟库上是一样的。...又经过一番查找,才发现原来是脚本中的一行 echo 引入的。 问题代码 出问题的那行 bash 脚本是这样, echo 一个字符串到某配置文件中。...复现问题 看看例子,就明白了,其实就是匹配到了文件名。...echo "[partition]" >> xxx.config glob简介 解决了问题,再回头认识下这个特性。这个叫 glob ,是 bash 的一个特性,可以实现文件名的通配。...'*' '[' 的时候就会触发匹配,自动展开成匹配到的文件列表,这个比正则表达式要弱一些,但胜在简单实用。 大家可能经常用到类似于 ls *.c' 之类的功能,这就是 glob 生效的地方。
背景 我们在应用程序的代码中添加业务日志的时候,不论是什么级别的日志,除了我们主动传给 Logger 让它记录的信息外,这行日志是由哪个函数打印的、所在的位置也是非常重要的信息,不然排查问题的时候很有可能就犹如大海捞针...//获取的是 CallerA函数的调用者的调用栈 pc1, file1, lineNo1, ok1 := runtime.Caller(1) } 函数的返回值为调用栈标识符、带路径的完整文件名...、该调用在文件中的行号。...获取调用者的函数名 runtime.Caller 返回值中第一个返回值是一个调用栈标识,通过它我们能拿到调用栈的函数信息 *runtime.Func,再进一步获取到调用者的函数名字,这里面会用到的函数和方法如下...真正要实现日志门面之类的类库的时候,可能是会有几层封装,想在日志里记录的调用者信息应该是业务代码中打日志的位置,这时要向上回溯的层数肯定就不是 1 这么简单了,具体跳过几层要看实现的日志门面具体的封装情况
进程是程序的副本,进程是程序执行的实例 bash自身是外部命令 但是它带有自身命令 用户的工作环境: bash: shell,子shell bash---bash 某些设定bash之间互不影响(非环境变量...n :执行命令历史中的第n条命令 !-n:执行命令历史中的倒数第n条命令 !!:执行上一条命令 !string:执行命令历史中最近一次匹配的命令 引用前一个命令的最后参数 !...$:引用前一个命令的最后参数 ESC,. 上一次命令 ALT+..../file-$(date +%F-%H-%M-%S).txt bash支持的引号: ``:命令替换 "":弱引用,可以实现变量替换 '':强引用,不完成变量替换 文件名通配,gloobbing *:...' [:space:]:空白字符 [:punct:] :标点符号 [:lower:]:小写字母 [:upper:]:大写字母 [:digit:]:数字 [:alnum:]:数字和字母 man 7 glob
视频通过演示了如何在代码中使用可空引用类型,以及如何在库和框架中注释可空性,来展示这个特性的优势和注意事项。视频还解释了编译器是如何进行流分析和推断可空性的,以及如何处理泛型、接口和虚方法等情况。...最后介绍了如何在项目中启用可空引用类型特性,以及一些常见的问题和解决方案。视频的目的是让开发者了解可空引用类型特性的原理和用法,以及如何在自己的项目中应用它,从而减少空引用异常的发生,提升代码质量。...因为很多人是不看警告的,我在很急的时候也常常忽略警告,但这恰恰是 bug 之源。 最后,我希望尽可能减少代码中的 null,甚至干掉业务代码中的 null。我觉得这样会让我的代码人生更加快乐。 4....OptionalExtensions.cs:定义了一些扩展方法,如 ToOption、Where 和 WhereNot,用于将可空引用类型转换为 Option 类型的值。...Optional 模式 中已经穿插讲过了它的部分优点,这里说一下我体会到的优势: 示例代码中,没有一个 null。
在 eclipse 中的 动态web项目 中,例如:我们通过向 /bos19/WebContent/WEB-INF/lib 中添加我们需要用到的jar包,如下图所示: ?...然后我们的jar包会自动的添加至构建路径中,即:Web App Libraries ,Web应用程序库中,如下图所示: ? 现在我们发现添加至构建路径的jar中有重复的jar,如下图所示: ?...即我们先把 Web App Libraries 这个库删除掉,然后我们回到 lib 目录下,此时可以删除掉重复的jar。...如果不先如上这样操作的话,重复的jar是删除不掉的,因为重复的jar已经加载进配置文件里面去了。...点击 Next --> 选择对应的项目后,点击 Finish ,之后,在 lib 中的jar会 自动添加至构建路径,即添加至 Web App Libraries。 至此,重复的jar我们顺利删除了!
表示当前的shell(如/bin/bash) 可以通过 ls /fl?????...=和“获得shell的方法 2: 配合通配符执行匹配文件 和 .使用当前shell执行文件 3: 配套上文件上传暂存文件名的规律构造匹配的通配符 最终实现通过当前shell(如/bin/bash...PHP5+shell打破禁锢 因为反引号不属于“字母”、“数字”,所以我们可以执行系统命令,但问题来了:如何利用无字母、数字、$的系统命令来getshell?...此时我想到了两个有趣的Linux shell知识点: shell下可以利用.来执行任意脚本 Linux文件名支持用glob通配符代替 第一点曾在《 小密圈里的那些奇技淫巧 》露出过一角,但我没细讲。....或者叫period,它的作用和source一样,就是用当前的shell执行一个文件中的命令。比如,当前运行的shell是bash,则. file的意思就是用bash执行file文件中的命令。
领取专属 10元无门槛券
手把手带您无忧上云