Bash脚本中含空格的路径变量导致rsync无法识别的问题解决
Bash脚本中含空格的路径变量导致rsync无法识别的问题解决
嗨,这个问题我太熟悉了!bash 默认会把空格当作字段分隔符,所以你直接使用带空格的路径变量时,它会把 /My 和 Images/ 当成两个独立的参数传给 rsync,自然找不到正确的文件夹。下面给你几个靠谱的解决办法:
用双引号包裹变量(最推荐)
给变量赋值和调用变量时都用双引号,这样bash会把整个路径当成一个完整的字符串处理,不会拆分空格。修改后的脚本如下:Source="/My Images/" Target="/Transfer/Media/" rsync -avu --progress "$Source" "$Target"这个方法通用性最强,不管路径里有空格还是其他特殊字符(比如
!、$)都能正确处理。给空格添加转义符
在路径的空格前加上反斜杠\,告诉bash这个空格是路径的一部分,不是分隔符:Source=/My\ Images/ Target=/Transfer/Media/ rsync -avu --progress "$Source" "$Target"不过如果路径里有多个空格,这种方式会比较繁琐,不如双引号来得方便。
用单引号赋值(注意局限性)
赋值时可以用单引号包裹路径,单引号里的内容会被bash原样解析,不会拆分空格:Source='/My Images/' rsync -avu --progress "$Source" "$Target"但要注意,单引号里的变量不会被bash解析,如果你的路径里包含其他变量(比如
$HOME),就不能用单引号了,这时候双引号是更好的选择。
最后给个小提醒:写bash脚本时,涉及路径或字符串变量的地方,尽量都用双引号括起来,能避开大部分类似的空格、特殊字符坑!
备注:内容来源于stack exchange,提问作者RonLat
相关产品推荐
相关产品推荐

