我无法相信我花了1.5个小时做一些像这样微不足道的事情。我正在写一个非常简单的shell脚本,它会压缩文件,将输出存储在变量中,然后将变量回显到STDOUT。
我在命令行上使用正则表达式检查了grep命令,它运行正常。但由于某种原因,grep命令在shell脚本中不起作用。
这是我写的shell脚本:
#!/bin/bash
tt=grep 'test' $1
echo $tt
我使用以下命令运行此命令:./myScript.sh testingFile
。它只是打印一个空行。
/bin
。echo $SHELL
提供/bin/bash
tt=grep 'test' "$1"
echo ${tt}
tt=grep 'test' testingFile
dos2unix
来删除任何可能的回车。tt=grep -oE 'test' testingFile
,我收到错误消息:./out.sh: line 3: -oE: command not found
。答案 0 :(得分:15)
您需要使用命令替换:
#!/usr/bin/env bash
test=$(grep 'foo' "$1")
echo "$test"
命令替换允许输出命令来替换命令本身。当命令被包含在这样的命令时发生命令替换:
$(command)
或像这样使用反引号:
`command`
Bash通过执行COMMAND并使用命令的标准输出替换命令替换来执行扩展,删除任何尾随换行符。嵌入的换行不会被删除,但在分词时可能会被删除。
$()
版本通常是首选,因为它允许嵌套:
$(command $(command))
有关详情,请参阅command substitution
中的man bash
部分。