fish shell中如何通过管道将date输出传入string join生成无空格日志文件名
实现方法
完全可以通过管道命令实现该需求。
你之前的写法没有得到预期结果,核心原因是fish shell的命令替换会默认按任意空白字符拆分输出内容为列表元素,连续空格会被直接当成分隔符处理,再加上echo输出多参数时会自动插入单个空格分隔,最终导致空格没有被正确移除。
最直接的管道实现
直接将date的输出通过管道传给string replace命令,全局替换所有空格为空字符串即可:
date | string replace -a ' ' ''
参数说明:
-a是--all的缩写,表示替换文本中所有匹配的空格,而非仅替换第一个匹配项
执行后会直接输出你需要的无空格格式,例如TueJun722:26:09PDT2022。
如果需要将结果存为变量用作日志文件名,写法如下:
# 生成无空格的时间字符串并存入变量 set dt (date | string replace -a ' ' '') # 直接作为文件名使用即可 touch $dt.log
更稳定的优化方案
如果不需要保留date默认输出的格式,更推荐直接指定date的输出格式,从源头避免空格,不需要额外做字符串替换:
# GNU date(绝大多数Linux发行版默认) date +"%a%b%-d%T%Z%Y" # BSD date(macOS默认) date +"%a%b%e%T%Z%Y" | string replace ' ' ''
这种写法不受系统默认locale、date输出规则变化的影响,作为日志文件名使用时稳定性更高。
内容的提问来源于stack exchange,提问作者Gianni Crivello
相关产品推荐
相关产品推荐

