首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >用于diff操作的回波重定向字符串

用于diff操作的回波重定向字符串
EN

Stack Overflow用户
提问于 2015-09-08 06:21:29
回答 1查看 105关注 0票数 0

我的内容需要在两个变量中进行比较-- res1和res2

代码语言:javascript
运行
复制
compRes=`diff -W999 --side-by-side <(echo ${res1}) <(echo ${res2})`

抛出一些错误

代码语言:javascript
运行
复制
command substitution: line 435: syntax error near unexpected token `('
command substitution: line 435: `diff -W999 --side-by-side <(echo ${res1}) <(echo ${res2})'

也尝试过双引号。

代码语言:javascript
运行
复制
compRes=`diff  -W999 --side-by-side <(echo "$res1") <(echo "$res2")`

同样的错误:

代码语言:javascript
运行
复制
command substitution: line 435: syntax error near unexpected token `('
command substitution: line 435: `diff  -W999 --side-by-side <(echo "$res1") <(echo "$res2")'

有什么问题吗?

一些附加信息(奇怪):

代码语言:javascript
运行
复制
File: test.sh

    file1="Simple.csv"
    file2="SimpleWithAddedLine.csv"

    res1=$(cut -d, -f1-2 $file1)
    res2=$(cut -d, -f1-2 $file2)
    compRes=`diff -W999 --side-by-side <(echo "$res1") <(echo "$res2") | sed '/^[^\t]*\t\s*|\t\(.*\)/{s//\1 CMPUPDATED/;b};/^\([^\t]*\)\t*\s*<$/{s//\1 CMPDELETED/;b};/^.*>\t\(.*\)/{s//\1 CMPNEW/;b};d'`
    added=$(echo "$compRes" | grep "CMPNEW" | wc -l)
    deleted=$(echo "$compRes" | grep "CMPDELETED" | wc -l)
    updated=$(echo "$compRes" | grep "CMPUPDATED" | wc -l)
    let "ttlUpdates = $added + $deleted + $updated"
    echo -e "\nAdded: $added - Deleted: $deleted - Updated: $updated"
    echo -e "Total Changes: $ttlUpdates (Maximum allowed: $maxAllowed)\n"

代码语言:javascript
运行
复制
File: callscript.sh

#!/bin/bash

CORE_SCRIPT_FILE="test.sh"
sh ${CORE_SCRIPT_FILE} | tee "logfile.log"

好吧,我有两个文件。当我打电话给test.sh的时候-一切都很好。

代码语言:javascript
运行
复制
[batch]$ ./test.sh

Added: 4 - Deleted: 1 - Updated: 1
Total Changes: 6 (Maximum allowed: )

同时,当我调用- callscript.sh文件时:

代码语言:javascript
运行
复制
[batch]$ ./callscript.sh
/abc/test.sh: command substitution: line 6: syntax error near unexpected token `('
/abc/test.sh: command substitution: line 6: `diff -W999 --side-by-side <(echo "$res1") <(echo "$res2") | sed '/^[^\t]*\t\s*|\t\(.*\)/{s//\1 CMPUPDATED/;b};/^\([^\t]*\)\t*\s*<$/{s//\1 CMPDELETED/;b};/^.*>\t\(.*\)/{s//\1 CMPNEW/;b};d''
EN

回答 1

Stack Overflow用户

发布于 2015-09-08 08:26:27

callscript.sh中,当您运行test.sh时,您使用的是sh,但是<(...)进程替换语法仅在bash中。将最后一行更改为

代码语言:javascript
运行
复制
bash ${CORE_SCRIPT_FILE} | tee "logfile.log"

而且它应该能正常工作。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32450566

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档