我需要编写一个 bash 函数,给定一个表示命令行的字符串,它只返回命令行中的第一个标记(即被调用的程序,其名称中可能有空格),删除任何参数。我想在不使用sed
orawk
或任何东西的情况下做到这一点,除了 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 别名的问题有关;这是我最终要在那里完成的事情的一个子问题。