我尝试使用grep进行进程替换,如下所示:
#!/bin/bash
if [grep -c "*" <(cut -d"," -f5 input_q1.csv) ]
then
echo "Yes";
else
echo "No";
fi
但我收到了错误:
line 2: [grep: command not found
我错过了什么?
答案 0 :(得分:1)
[ ... ]
不是if语句的语法的一部分;相反,[
(也称为test
)是一个Bash内置命令,它通常用作if语句中的test-command。
在你的情况下,你的测试命令是grep
而不是[
,所以你会写:
if grep -c "*" <(cut -d"," -f5 input_q1.csv) ; then
此外,这里没有使用过程替换的真正理由。管道的总体结果是管道中最终命令的结果;和grep支持从标准输入读取。所以你可以写:
if cut -d"," -f5 input_q1.csv | grep -c "*" ; then
支持更广泛的系统。
(顺便说一下,,
周围的引号不做任何事情:-d","
表示-d,
表示"-d,"
。如果你的目标是&#34 ;突出显示&#34;分隔符,或以某种方式设置它,然后将它分成单独的参数可能更有意义:-d ,
。但这是一个偏好问题。)
答案 1 :(得分:0)
if cut -d"," -f5 input_q1.csv | grep -c "*"; then
...并且您需要将*
更改为有效的正则表达式,因为*
肯定不是。
正如我在Why doesn't my if statement with backticks work properly?中解释的那样,
if
中的shells
接受命令。
[
是一种调用test
命令的方法 - 它不像if
用于其他语言的括号。