【发布时间】:2017-03-17 17:42:14
【问题描述】:
我正在尝试编写一个fgrep 语句,从文件中删除具有完整记录匹配的记录。我可以在命令行上执行此操作,但不能在 ksh 脚本中执行此操作。我使用的代码归结为以下 4 行代码:
Header='abc def|ghi jkl' #I use the head command to populate this variable
workfile=abc.txt
command="fgrep -Fxv \'$Header\' $workfile" >$outfile
$command
当我将$command 回显到 STDIN 时,该命令正是我在命令行上键入的内容(带单引号),并且在命令行上有效。当我在ksh 脚本(文件)中执行它时,似乎无法识别单引号,因为错误表明它正在解析空格。
我尝试过反引号、exec、eval、双引号而不是单引号,并且没有使用$command 变量。问题依然存在。
【问题讨论】:
-
当人们试图构建一个变量
$cmd然后“运行它”时,通常是因为他们试图做一些 shell 可以通过不同路径解决的事情。你真的需要运行$command吗?我会将您的精力重新集中在让正常的 shell 脚本工作上,然后决定您是否真的需要这种额外的间接级别。您的$header中的|字符还不清楚。在 grep reg ex 中,它代表OR;在shell中,当然是pipe。所以这里有几个不清楚的问题。更新您的 Q(或针对此问题更改您的策略)。祝你好运。 -
如果某个答案解决了您的问题,请点击旁边的大复选标记 (✓) 接受它,并可选择对其进行投票(投票至少需要 15 个声望点)。如果您发现其他答案有帮助,请给他们投票。接受和投票有助于未来的读者。请参阅the relevant help-center article。如果您的问题尚未完全得到解答,请提供反馈。如果您觉得自己找到了最佳解决方案,请将其发布为答案并自我接受。