linux – 如何在用sh而不是bash运行的脚本中使用进程替换?
我试图在
shell脚本中传递命令,但收到错误:
a.sh: command substitution: line 1: syntax error near unexpected token `(' a.sh: command substitution: line 1: `comm -12 <( sort /home/xyz/a.csv1 | uniq) <( sort /home/abc/tempfile | uniq) | wc -l' 代码片段 – temp=`comm -12 <( sort /home/xyz/a.csv1 | uniq) <( sort /home/abc/tempfile | uniq) | wc -l` echo $temp 解决方法
目前尚不完全清楚,但是你在脚本顶部有一个不正确的shebang线的可能性非常高:
#!/bin/sh 或者您在测试时使用sh script.sh而不是bash script.sh,或者您在环境中设置了SHELL = / bin / sh或类似的东西.您的失败是在process substitution代码上.当Bash以sh运行时(在POSIX mode中),则进程替换不可用:
你需要写: #!/bin/bash temp=$(comm -12 <(sort -u /home/xyz/a.csv1) <(sort -u /home/abc/tempfile) | wc -l) echo $temp 甚至简单地说: #!/bin/bash comm -12 <(sort -u /home/xyz/a.csv1) <(sort -u /home/abc/tempfile) | wc -l 这将获得与回声后跟随捕获相同的效果.测试时,使用bash -x script.sh或bash script.sh. 解读难以理解的评论 在难以理解(现已删除)的comment中,信息似乎包括:
请注意,BASH = / bin / sh和SHELLOPTS = braceexpand:hashall:interactive-comments:posix.这些中的任何一个或两个都可能是问题的主要部分. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |