将bash函数转换为fish的[关闭]

问题描述 投票:9回答:1

有人可以帮我把这个bash函数转换为fish吗?如果你能解释一下像"${@%%.app}”'s/ /.*/g’"$@\”等那么做也会很好。

bid() {
    local shortname location

    # combine all args as regex
    # (and remove ".app" from the end if it exists due to autocomplete)
    shortname=$(echo "${@%%.app}"|sed 's/ /.*/g')
    # if the file is a full match in apps folder, roll with it
    if [ -d "/Applications/$shortname.app" ]; then
        location="/Applications/$shortname.app"
    else # otherwise, start searching
        location=$(mdfind -onlyin /Applications -onlyin ~/Applications -onlyin /Developer/Applications 'kMDItemKind==Application'|awk -F '/' -v re="$shortname" 'tolower($NF) ~ re {print $0}'|head -n1)
    fi
    # No results? Die.
    [[ -z $location || $location = "" ]] && echo "$1 not found, I quit" && return
    # Otherwise, find the bundleid using spotlight metadata
    bundleid=$(mdls -name kMDItemCFBundleIdentifier -r "$location")
    # return the result or an error message
    [[ -z $bundleid || $bundleid = "" ]] && echo "Error getting bundle ID for \"$@\"" || echo "$location: $bundleid”
}

首先十分感谢。

bash shell fish
1个回答
34
投票

关于差异的一些注意事项:

  • 设置变量 bash:var=value 鱼:set var value
  • 函数参数 bash:"$@" 鱼:$argv
  • 函数局部变量 bash:local var 鱼:set -l var
  • 条件我 bash:[[ ... ]][ ... ] 鱼:test ...
  • 条件II bash:if cond; then cmds; fi 鱼:if cond; cmds; end
  • 条件III bash:cmd1 && cmd2 鱼:cmd1; and cmd2 鱼(鱼类3.0):cmd1 && cmd2
  • 命令替换 bash:output=$(pipeline) 鱼:set output (pipeline)
  • 过程替代 bash:join <(sort file1) <(sort file2) 鱼:join (sort file1 | psub) (sort file2 | psub)

文档

© www.soinside.com 2019 - 2024. All rights reserved.