Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Bash脚本错误地处理命令行参数_Bash - Fatal编程技术网

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

Bash脚本错误地处理命令行参数,bash,Bash,我得到了一个使用两个命令行参数的脚本 /metagwastolkit.run.sh metagwastolkit.model1.conf metagwastolkit.files.model1.list 稍后在脚本中,我将执行以下操作: echo“cat meta.results.out | parseTable.pl--col VARIANTID,p|SQRTN,p|u FIXED,p|RANDOM | awk'$2==0 | | | 3==0{print$1,$2,$3,$4}>meta r

我得到了一个使用两个命令行参数的脚本

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

稍后在脚本中,我将执行以下操作:

echo“cat meta.results.out | parseTable.pl--col VARIANTID,p|SQRTN,p|u FIXED,p|RANDOM | awk'$2==0 | | | 3==0{print$1,$2,$3,$4}>meta results.需要p|u FIXED.out>meta p.p|u corrector.sh

这不是生产我想要的,而是生产:

cat meta.results.out | parseTable.pl--col VARIANTID,p|SQRTN,p|u FIXED,p|u RANDOM | awk'metagwastolkit.files.model1.list==0 | |==0 | print metagwastolkit.model1.conf,metagwastolkit.files.model1.list,}>meta.results.needs

因此,它将我的配置文件作为$1,将我的files.list作为$2…这显然不是我想要的…如果字段2、3或4等于0,我希望它从管道打印列1到4

我怎样才能改变这个

最好的


Sander

因此答案是在
echo
中,变量被命令行参数替换,这不是我的意图。解决方案是转义
$
-符号

工作路线是:

echo“cat meta.results.out | parseTable.pl--col VARIANTID,p|SQRTN,p|u FIXED,p|RANDOM | awk'\$2==0 | | | 3==0{print\$1,\$2,\$3,\$4}meta results.需要p|u FIXED.out”>meta p|u corrector.sh

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

感谢@Barmar帮我找到了解决方案

最好的


桑德

到底是什么做得不对??如果这是一个变量覆盖/替换问题,我怀疑您的
源${1}
可能会用源文件中的值覆盖当前脚本中的变量名,但我不明白您是如何反驳参数
$1
$2
不包含您想要的内容的,您的
awk'**$2==0 | | |$3==0 | | |$4==0{打印$1,$2,$3,$4**}'
似乎没有按照您的想法执行。仔细检查
awk
语法。我不明白这个问题。您从未在脚本中的任何位置使用
CONFIGURATIONFILE
GWASFILE
。该
awk
脚本看起来语法无效。您希望
**
awk
中做什么?因此,您遇到的问题是,shell变量被替换到
awk
命令中。变量不会在单引号字符串中展开,所以我不认为这是可能的,除非您正在做一些您没有清楚显示的事情。