我想知道如何將參數bash
中的函數正確「轉發」到另一個函數或程序。如何在bash中正確「轉發」函數參數?
例如,Mac OS X中有一個命令行程序open
(man page),將打開指定的文件,其默認的應用程序(即,它會打開在Xcode一個* h文件,或在搜索文件夾,等等)。我想簡單地調用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
會導致錯誤「文件/用戶/檢查器-g/other和/Users/inspector-g/header.h不存在」,但解決了另一個問題。
必須有一些轉發參數的約定,我只是錯過了。
工作就像一個魅力,非常感謝你。有那麼多的'$'變數! – 2012-04-20 01:42:06
事實上'$ *'在你必須在一個字符串內轉發參數(例如'mosel -s -c「exec $ *」') – 2014-06-15 14:47:27