从bash中表示命令行的字符串中删除任何参数

时间:2013-01-07 03:34:08

标签: bash shell scripting

我需要编写一个bash函数,给定一个代表命令行的字符串,只返回命令行中的第一个标记(即被调用的程序,,其名称中可能有空格),删除任何参数。我希望使用sedawk或除了bash内置和变量操作之外的其他任何内容

e.g:

drop_args "ls" # prints "ls"
drop_args "ls -al" # prints "ls"
drop_args "spaces\ in\ name --bad-idea" # prints "spaces\ in\ name"

我尝试的是:

drop_args () { echo $1; }

然后我调用drop_args ls -al,即不引用字符串,除了drop_args spaces\ in\ name之外,我能看到的所有情况都能很好地工作。

如果我不能通过我已经规定的限制正确处理空格情况,我不会非常担心,但我需要至少可靠地检测到这种情况并显示相应的错误消息,我想。

这与我之前关于dereferencing shell aliases的问题有关;这是我最终要在那里完成的一个子问题。

1 个答案:

答案 0 :(得分:0)

drop_args()
{
  read cmd args <<< "$1"
  echo "$cmd"
}

这会丢失反斜杠,但它们从来就不是真正意义上的“那里”。