首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >bash:以空格作为参数传递路径?

bash:以空格作为参数传递路径?
EN

Stack Overflow用户
提问于 2011-09-24 06:58:55
回答 4查看 19.6K关注 0票数 21

我有一个bash脚本,它接收来自用户的一组文件。这些文件有时位于名称中包含空格的目录下。不幸的是,与this question不同,所有的文件名都是通过命令行接口传递的。让我们假设路径在用户传入时正确地加了引号,因此空格(除了引号空格)是路径之间的分隔符。如何以保留引用空格的方式将这些参数转发到bash脚本中的子例程?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2011-09-24 07:04:06

代码语言:javascript
复制
#! /bin/bash

for fname in "$@"; do
  process-one-file-at-a-time "$fname"
done

注意引号的过度使用。这一切都是必要的。

将所有参数传递给另一个程序甚至更简单:

代码语言:javascript
复制
process-all-together "$@"

棘手的情况是当您想要将参数一分为二时。这需要在一个简单的POSIX shell中编写更多的代码。但也许Bash有一些特殊的功能。

票数 25
EN

Stack Overflow用户

发布于 2011-09-24 07:05:51

您需要使用"$@",它具有扩展$@但保留调用者的空格引号的特殊语法(它不会创建一个包含所有参数的巨大字符串)。因此,有人可以像这样调用您的脚本:

代码语言:javascript
复制
bash-script.sh AFile "Another File With Spaces"

然后,在您的脚本中,您可以执行以下操作:

代码语言:javascript
复制
for f in "$@"; do 
  echo "$f"; 
done

并得到两行输出(而不是5行)。

请在此处阅读有关特殊参数"@“的段落:http://www.gnu.org/s/bash/manual/bash.html#Special-Parameters

票数 6
EN

Stack Overflow用户

发布于 2017-09-24 23:41:21

太棒了@Roland。这对您的解决方案有很大帮助

它真的起作用了!

我编写了一个简单的脚本函数,它使用nautilus打开给定的路径。

我刚刚用这个“helper”-for循环嵌套了一个函数到main函数中:

代码语言:javascript
复制
fmp ()  {

    fmp2() { 
        nautilus "$@"; 
    };

    for fname in "$@";
    do         
        fmp2 "$fname";         
    done; 
}

现在,我可以让我的所有脚本处理路径,只需将它们转换为嵌套函数,并使用此helper-for循环将其封装。

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

https://stackoverflow.com/questions/7535677

复制
相关文章

相似问题

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