linux - 如何在 shell 文件中使用 awk 的 $0 变量

标签 linux bash shell awk

1.我的shell文件是

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

2.exe我的shell文件

[root@node3 script]# sh hi.sh 

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

awk:                 ^ syntax error

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

那么如何在 shell 文件中使用 awk 的 $0 呢?

$0 默认文件名。

另一个问题。我想在 awk 中使用 var $0,但在 shell 文件中使用另一个 $variable。我应该怎么办?

$ cat hi.sh 
#!/bin/bash 
strings="sdsf sdsda sdsadx" 
num=9 
echo \`awk '{print substr($0,0,$num)}' <<< $strings\`

最佳答案

您脚本的问题是在 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

关于linux - 如何在 shell 文件中使用 awk 的 $0 变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44693495/

相关文章:

bash - 非重复行数 - 唯一计数

linux - Bash 脚本中文档样式的标准是什么?

mysql pam插件错误

Python sys.stdout 不适用于 init.d 脚本

linux - Linux 中的命令替换 - 在 bashrc 中设置变量(用户名和密码)

linux - 在 bash 中使用区分行符号 # 提取子数组

linux - 如何从当前目录执行添加到 .bashrc 的文件?

linux - 如何找到使用 TCP 端口的进程?

linux - 运行 nodejs 非 root

bash - 如何使用 Bash 脚本中的密码运行 sftp 命令?