0

我需要编写一个 bash 函数,给定一个表示命令行的字符串,它只返回命令行中的第一个标记(即被调用的程序,其名称中可能有空格),删除任何参数。我想在使用sedorawk或任何东西的情况下做到这一点,除了 bash 内置函数和变量操作。

例如:

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.

如果我不能以我规定的限制正确处理空格情况的方式执行此操作,我并不太担心,但我想我至少需要可靠地检测到这种情况并显示适当的错误消息。

这与我之前关于取消引用 shell 别名的问题有关;这是我最终要在那里完成的事情的一个子问题。

4

1 回答 1

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

这失去了反斜杠,但它们从一开始就不是真的“在那里”。

于 2013-01-07T04:14:53.110 回答