在Linux Shell中使用含空格变量作为jdupes命令参数的问题
解决群晖DS218脚本中jdupes排除路径的变量维护问题
在群晖DS218的bash脚本里,直接用普通字符串变量存储带空格的jdupes排除参数会踩坑——bash的分词机制会把空格当成参数分隔符,导致jdupes识别错误。正确的解法是用数组来维护这些参数,具体操作如下:
1. 用数组定义排除参数
把每个独立的参数项作为数组的一个元素,确保带空格的路径被完整包裹:
# 分行写法,可读性更强 exclude_params=( -X "nostr:somepath/with spaces" -X "nostr:and/some other path" ) # 单行紧凑写法 exclude_params=(-X "nostr:somepath/with spaces" -X "nostr:and/some other path")
2. 调用jdupes时展开数组
用"${exclude_params[@]}"的方式展开数组,这样每个数组元素都会被bash识别为独立的参数,不会因为空格被拆分:
jdupes -rA "${exclude_params[@]}" "/mydir"
为什么之前的方法失败?
不管给普通字符串变量加多少引号,bash在展开变量时都会按空格、制表符等分隔符拆分内容。比如你存的-X nostr:"somepath/with spaces"会被拆成-X、nostr:"somepath/with、spaces"三个独立参数,jdupes自然无法正确解析。而数组可以完整保留每个参数的边界,展开时能精准传递给jdupes。
内容的提问来源于stack exchange,提问作者Carrie Rogers
相关产品推荐
相关产品推荐

