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

从表示bash中命令行的字符串中删除任何参数,bash,shell,scripting,Bash,Shell,Scripting,我需要编写一个bash函数,给定一个表示命令行的字符串,该函数只返回命令行中的第一个标记(即被调用的程序,,其名称中可能有空格),删除任何参数。我不想使用sed或awk或bash内置和变量操作以外的任何操作来执行此操作 e、 g: 我试过的是: drop_args () { echo $1; } 然后我调用drop_args ls-al,也就是说,不引用字符串,这对我能看到的所有情况都很有效,除了drop_args spaces\in\name 如果我不能按照我规定的限制正确处理空格情况,我并

我需要编写一个bash函数,给定一个表示命令行的字符串,该函数只返回命令行中的第一个标记(即被调用的程序,,其名称中可能有空格),删除任何参数。我不想使用
sed
awk
或bash内置和变量操作以外的任何操作来执行此操作

e、 g:

我试过的是:

drop_args () { echo $1; }
然后我调用
drop_args ls-al
,也就是说,不引用字符串,这对我能看到的所有情况都很有效,除了
drop_args spaces\in\name

如果我不能按照我规定的限制正确处理空格情况,我并不太担心,但我想我至少需要可靠地检测这种情况并显示适当的错误消息

这与我先前的问题有关;这是我最终试图在那里完成的一个子问题。

drop_args()
drop_args()
{
  read cmd args <<< "$1"
  echo "$cmd"
}
{
阅读cmd args我看你的函数没有问题。它处理
spaces\in\name
而没有引号。不确定问题出在哪里。我创建了一个脚本:“do It.sh”。脚本的内容只是“echo$0”。当我运行它时,它回显了“do It.sh”。这不是你想要的吗?@perreal-Hmm,你是对的,它在命令行中似乎工作得很好:
$drop\u args A\Bad\Program——可怕的
返回一个坏程序
但是当从shell脚本中调用时,我猜转义空格的行为不同,它返回“A\”。我需要它来工作精简脚本。您的示例中的双引号是什么意思?我希望
drop\u-args“foo-bar”
打印
foo-bar
drop\u-args-foo-bar
打印
foo
@tripleee在脚本上下文中似乎无关紧要;
\
(反斜杠空格)只是没有按我所希望的方式进行分析这似乎在脚本中无法正常工作;字符串中反斜杠的行为是不同的。为什么反斜杠被放在任意位置?你是什么意思?它们是用来“逃逸”的空格可能在命令行上转义。它们只在命令行上转义,因为shell将改为按单词分割。此代码确保它不会被分割。为什么您认为您仍然需要它们?因为我的程序需要解析
别名
的输出,该输出显示别名的值在命令行中输入。(为什么需要这样做与此无关或有趣。)
drop_args()
{
  read cmd args <<< "$1"
  echo "$cmd"
}