我需要编写一个bash函数,给定一个代表命令行的字符串,只返回命令行中的第一个标记(即被调用的程序,,其名称中可能有空格),删除任何参数。我希望使用sed
或awk
或除了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的问题有关;这是我最终要在那里完成的一个子问题。
答案 0 :(得分:0)
drop_args()
{
read cmd args <<< "$1"
echo "$cmd"
}
这会丢失反斜杠,但它们从来就不是真正意义上的“那里”。