Bash脚本中的进程替换无法工作

3

我遇到了一个奇怪的问题。当我从bash脚本中调用进程替代时,它无法正常工作,但是当我在终端中执行时,它可以正常工作。

以下是示例:在终端上运行时:

terminal>echo "$x"
a b c
d e f
g h i
j k l

terminal>echo "$y"
1
2
3
4

terminal>paste <(echo "$x") <(echo "$y") -d' '
a b c 1
d e f 2
g h i 3
j k l 4
这里有一个例子:示例脚本。
    #!/bin/bash
    x='a b c
    d e f
    g h i
    j k l'


    y='1
    2
    3
    4'

    paste <(echo "$x") <(echo "$y") -d' '
当我运行上述脚本时,我遇到了以下错误:
test: line 12: syntax error near unexpected token `('
test: line 12: `paste <(echo "$x") <(echo "$y") -d' ''
以下是我使用的shell的详细信息。
echo $SHELL
/bin/bash
bash --version
GNU bash, version 4.2.47(1)-release (x86_64-suse-linux-gnu)

有没有其他绕过这个问题的方法?不一定要使用进程替换。

期望输出:

a b c 1
d e f 2
g h i 3
j k l 4

2
你的脚本在我的Debian jessie上的bash 4.3.30中运行正常。你发布的脚本是你尝试执行的真实脚本吗? - undefined
1
它运行得很好,你有检查过CRLF的DOS换行符吗?可能是从Windows编辑器复制过来的吧? - undefined
1
完美运行 - 在红帽机器上在线检查:http://www.tutorialspoint.com/execute_bash_online.php?PID=0Bw_CjBb95KQMblNDeUR6cTM1XzA - undefined
1
我相信你知道如何处理这些事情,我只是在另一台机器上进行了测试,它成功了。顺便说一下,在Bash处于POSIX模式时,进程替换是不起作用的... 这可能是原因吗? - undefined
1
@GeorgeVasiliou,请将此注释作为答案发布。您的评论让它起作用,我只是关闭了 posix - undefined
显示剩余5条评论
1个回答

阿里云服务器只需要99元/年,新老用户同享,点击查看详情
10

当bash处于POSIX模式时,进程替换无法工作。请禁用POSIX并重试。

禁用方法:这将使进程替换正常工作。

set +o posix
启用:这将导致进程替换无法工作。
set -o posix

谢谢你的修改,我当时在地下地铁,无法回复一路上的消息。 - undefined

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,