You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.01 23:15:41