Bash函数参数解析

时间:2018-12-14 02:02:23

标签: bash

我想拥有一个可以在命令行中调用的函数,该函数需要以下内容:

$ command_name /some/path/file.java

并变成以下呼叫:

command /some/path:file

基本上,我遇到的问题是用:代替最后一个/并去除文件扩展名。

2 个答案:

答案 0 :(得分:0)

不清楚您要问的是什么。您要使用bash function还是bash script?使用命令basenamedirname可以轻松完成路径和文件的分割。

例如:

$ dirname /path/to/file.txt
/path/to

$ basename /path/to/file.txt
file.txt

但是如果您必须使用正则表达式进行操作,sed的效果很好:

$ echo /path/to/file.txt | sed "s/.*\///"
file.txt

$ echo /path/to/file.txt | sed -r "s/(.+)\/.+/\1/"
/path/to

首先是一个脚本:

#! /usr/bin/env bash
COMMAND="/bin/echo"
JAVA="$1"
path=`dirname "$JAVA"`
file=`basename "$JAVA"`

exec "$COMMAND" "$path:$file"

现在是一个函数:

fnA()
{ 
    COMMAND="$1"
    JAVA="$2"
    path=`dirname "$JAVA"`
    file=`basename "$JAVA"`

    exec "$COMMAND" "$path:$file"
}

答案 1 :(得分:0)

假定原始路径字符串,

/some/path/file.java

以$ 1传递到脚本,您将修改后的字符串作为

path_string_with_colon=$(dirname $1):$(basename $1 .java)