【发布时间】:2013-10-27 03:51:43
【问题描述】:
我不敢相信我已经花了 1.5 个小时来做这么微不足道的事情。我正在编写一个 非常 简单的 shell 脚本,它对文件进行 greps,将输出存储在变量中,并将变量回显到 STDOUT。
我已经在命令行上用正则表达式检查了 grep 命令,它工作正常。但是由于某种原因,grep 命令在 shell 脚本中不起作用。
这是我写的shell脚本:
#!/bin/bash
tt=grep 'test' $1
echo $tt
我使用以下命令运行它:./myScript.sh testingFile。它只是打印一个空行。
- 我已经使用了 chmod 并使脚本可执行。
- 我已检查 PATH 变量中是否包含
/bin。 - 验证
echo $SHELL提供/bin/bash - 无奈之下,我尝试了以下所有组合:
tt=grep 'test' "$1"echo ${tt}- 根本不使用命令行参数,而是硬编码文件名
tt=grep 'test' testingFile
- 我发现了这个:grep fails inside bash script but works on command line,甚至使用
dos2unix来删除任何可能的回车。 - 此外,当我尝试使用任何 grep 选项时,例如:
tt=grep -oE 'test' testingFile,我收到一条错误消息:./out.sh: line 3: -oE: command not found。 - 这太疯狂了。
【问题讨论】:
-
您正在做的是暂时(仅针对此命令)将环境变量
tt设置为字符串grep并运行命令test并使用从 @ 的内容中获取的参数987654336@(即第一个脚本参数)(并设置了tt环境变量)