Bash脚本错误地处理命令行参数

时间:2017-05-11 09:16:40

标签: bash

我有一个使用两个命令行参数的脚本。

./metagwastoolkit.run.sh metagwastoolkit.model1.conf metagwastoolkit.files.model1.list

稍后在脚本中我这样做:

echo "cat meta.results.out | parseTable.pl --col VARIANTID,P_SQRTN,P_FIXED,P_RANDOM | awk ' $2 == 0 || $3 == 0 || $4 == 0 { print $1, $2, $3, $4 } ' > meta.results.needs_p_fixing.out" > meta.p_corrector.sh

这不是我想要的东西,它会产生:

cat meta.results.out | parseTable.pl --col VARIANTID,P_SQRTN,P_FIXED,P_RANDOM | awk ' metagwastoolkit.files.model1.list == 0 || == 0 || == 0 { print metagwastoolkit.model1.conf,metagwastoolkit.files.model1.list,, }' > meta.results.needs_p_fixing.out

所以我的配置文件为$ 1,我的files.list为$ 2 ...这显然不是我想要的...如果字段2,3或4相等,我希望它从管道中打印第1列到第4列到0。

如何更改此内容??

最佳,

桑德

1 个答案:

答案 0 :(得分:0)

所以答案是在echo内部变量被命令行参数替换,这不是我的意图。解决方案是逃避$ - 标志。

工作线是:

echo "cat meta.results.out | parseTable.pl --col VARIANTID,P_SQRTN,P_FIXED,P_RANDOM | awk '\$2 == 0 || \$3 == 0 || \$4 == 0 { print \$1, \$2, \$3, \$4 }' > meta.results.needs_p_fixing.out" > meta.p_corrector.sh

我想要的是:检查管道的第2,3和4列的字段是否等于0并打印这些字段。

感谢@Barmar帮我解决问题。

最佳,

桑德