2017-06-22 48 views
0

1.my shell文件是

[[email protected] script]# cat hi.sh 
#!/bin/bash 
strings="sdsf sdsda sdsadx" 
echo `awk "{print substr($0,0,9)}"<<<$strings` 

2.exe我的shell文件

[[email protected] script]# sh hi.sh 

awk: {print substr(hi.sh,0,9)} 

awk:    ^syntax error 

awk: 致命错误: 0 是 substr 的无效参数个数 

所以如何使用awk的$ 0 shell文件?

$ 0默认文件的名称。

另一个问题。我想使用关于awk的var $ 0,但在shell文件中使用另一个$变量。我该怎么做?

$猫hi.sh

!/斌/庆典

字符串= “SDSF sdsda sdsadx”

NUM = 9

呼应'的awk“{打印SUBSTR($ 0, 0,$ num)}'< < < $ strings`

+0

你想要的结果是什么? – RomanPerekhrest

+0

@RomanPerekhrest我得到了答案。无论如何感谢 – user8142092

+0

第二个问题,不要把它放在这里。看看这个[问题](https://stackoverflow.com/questions/19075671/how-to-use-shell-variables-in-an-awk-script)。如果仍然无法解决问题,请提出一个不同的问题。 – Utsav

回答

0

脚本的问题是在awk中使用双引号。用单引号替换它们。

当您使用双引号时,它内部的$0被视为脚本的第一个参数,在本例中为脚本名称hi.sh。如果您使用单引号,则可以使用$0作为awk参数来显示整行。

而且这里不需要echo,你可以只使用awk '{print substr($0,0,9)}' <<< $strings

$ cat hi.sh 
#!/bin/bash 
strings="sdsf sdsda sdsadx" 
#echo `awk '{print substr($0,0,9)}' <<< $strings` --echo not needed 
awk '{print substr($0,0,9)}' <<< $strings 
$ 
$ sh hi.sh 
sdsf sdsd 
+1

我换了,它工作。谢谢你。 ps:你在网上的代码仍然显示双引号。 – user8142092

+0

好抓,固定。 – Utsav

+0

你为什么回应一个命令sub? – 123