首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >BASH函数用于在打开文件名之前转义文件名中的空格

BASH函数用于在打开文件名之前转义文件名中的空格
EN

Stack Overflow用户
提问于 2016-07-25 16:07:55
回答 2查看 618关注 0票数 1

很长一段时间以来,我一直试图为bash配置文件编写一个函数。我试图克服的问题是,我通常会获得包含空格的文件路径,在尝试在终端中打开它之前,必须先通过和逃离所有的空间,这是一种痛苦。

例如档案-> /卷/公司/插图/网站首页Design.ai

我试图结束的是‘/批量/公司/插画/网站\首页\ Design.ai’从我的终端打开。

到目前为止,我已经设法摆脱了空格,但我得到了错误“文件.不存在”。

到目前为止我的代码是

代码语言:javascript
运行
复制
function opn { open "${1// /\\ }";}

任何帮助都将不胜感激。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-07-25 16:15:08

重要的是要理解语法和文字数据之间的区别。

如果正确执行,转义将是语法:它由shell读取并丢弃。也就是说,当你跑

代码语言:javascript
运行
复制
open "File With Spaces"

代码语言:javascript
运行
复制
open File\ With\ Spaces

甚至是

代码语言:javascript
运行
复制
open File" "With\ Spaces

shell解析并删除...the引用和转义,执行的实际操作系统调用如下:

代码语言:javascript
运行
复制
execv("/usr/bin/open", "open", "File With Spaces")

请注意,syscall的参数中没有任何反斜杠(或文字引号)!如果在数据中放置文字反斜杠,则会运行以下操作:

代码语言:javascript
运行
复制
/* this is C syntax, so "\\" is a single-character backslash literal */
execv("/usr/bin/open", "open", "File\\ With\\ Spaces")

除非有一个带有反斜杠的文件名为...and,否则它就不能工作,从而给出您报告的“文件不存在”错误。

所以--只要用你的名字在引号上喊开:

代码语言:javascript
运行
复制
open "$1"

.不需要opn包装器

票数 4
EN

Stack Overflow用户

发布于 2016-07-25 16:14:12

空格在文件名中是有问题的,因为它们是bash的默认IFS (内部字段分隔器)的一部分,用于分隔命令行中的令牌。这意味着,默认情况下,当您使用command an argument with spaces时,命令将接收4个参数,而不是包含空格的1个参数。

我猜您以同样的方式调用了您的opn函数,从而只得到了路径的第一部分$1

希望修复是简单的:将路径用引号括起来,这样bash就不会解释空格。通过这样做,您对opn函数的需求就消失了:open "/Volumes/Company/Illustrators/Website Front Page Design.ai"应该工作得很好。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38572630

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档