如何在 bash 中正确“转发”函数参数?
Posted
技术标签:
【中文标题】如何在 bash 中正确“转发”函数参数?【英文标题】:How does one properly "forward" function arguments in bash? 【发布时间】:2012-05-01 14:46:33 【问题描述】:我想知道如何将bash
中的函数参数正确“转发”到另一个函数或程序。
例如,在 Mac OS X 中,有一个命令行程序 open
(man page) 将使用其默认应用程序打开指定文件(即,它将在 Xcode 中打开 *.h 文件或文件夹在 Finder 等中)。我想简单地调用 open
不带参数来打开 Finder 中的当前工作目录,或者为其提供典型参数以正常使用它。
我想,“我将只使用一个函数!”哈,我想那里没那么快。这是我所拥有的:
function open
if [ $# -eq 0 ]; then
/usr/bin/open .
else
/usr/bin/open "$*"
fi
只需调用open
即可,它会在 Finder 中打开工作目录。调用 open myheader.h
效果很好,它会在 Xcode 中打开“myheader.h”。
但是,调用 open -a /Applications/TextMate.app myheader.h
尝试在 TextMate 中打开文件而不是在 Xcode 中会导致错误“找不到名为 '/Applications/TextMate.app myheader.h' 的应用程序”。似乎将"$*"
传递给/usr/bin/open
导致我的整个参数列表仅作为一个参数转发。
将函数更改为仅使用 usr/bin/open $*
(无引号)会导致路径中出现空格问题。调用 open other\ header.h
会导致错误“文件 /Users/inspector-g/other 和 /Users/inspector-g/header.h 不存在”,但可以解决其他问题。
必须有一些约定来转发我刚刚错过的参数。
【问题讨论】:
【参考方案1】:您确实错过了专为此案设计的"$@"
。
【讨论】:
工作就像一个魅力,非常感谢。$
vars 实在太多了!
确实,$*
在您必须在字符串中转发参数时起作用(例如 mosel -s -c "exec $*"
)以上是关于如何在 bash 中正确“转发”函数参数?的主要内容,如果未能解决你的问题,请参考以下文章
如何在bash脚本中通过函数调用将参数/参数从一个函数传递到另一个函数[重复]
如何将文件路径作为 bash 脚本中的参数传递给函数? [复制]