为了让包含参数内部空格的命令正常运行,我目前只发现以下方法可行:
我希望界面能够像这样工作:
使用 "filename" 包含这一行
这将为我提供所需的输出:
这里的问题在于我无法直接使用
eval 'sed 's/foo/foo'" "'bar/g' filename'
在一个假设的程序中,用户将输入一个命令,然后是要传递给eval的命令和参数,这不是一个非常优雅或健壮的解决方案。是否有其他方法来运行eval命令,以便my_command的接口可以更加用户友好?以下是程序现在接受参数的示例。
my_command 'sed 's/foo/foo'" "'bar/g' filename'
我希望界面能够像这样工作:
my_command sed 's/foo/foo bar/g' filename
编辑:
我会尝试问一个不同的问题:
如何让bash从命令行直接读取输入?我希望保留精确的输入,所以如果有引号,我想保留它们。我可以通过使用egrep从文件中读取然后净化输入来完成我的目标,如下所示:
egrep '/.*/' filename |
sed 's/\(.*\)['"'"']\(.*\) \(.*\)['"'"']\(.*\)/\1'"\'"'\2" "\3'"\'"'\4/g'
使用 "filename" 包含这一行
sed 's/foo/foo bar/g' file
这将为我提供所需的输出:
sed 's/foo/foo" "bar/g' file
这里的问题在于我无法直接使用
echo "$@"
,因为bash会解释引号。我希望能够直接获取输入而不用从文件中读取。