该命令打印:
\n\n$ echo "123456789" | awk \'{ print substr ($1,1,4) }\'\n1234\nRun Code Online (Sandbox Code Playgroud)\n\n是否可以将字符串作为命令执行?例如,这个命令:
\n\necho "123456789" | awk \'{a="substr"; print a ($1,1,4) }\'\nRun Code Online (Sandbox Code Playgroud)\n\n结果:
\n\n$ echo "123456789" | awk \'{a="substr"; print a ($1,1,4) }\'\nawk: {a="substr"; print a ($1,1,4) }\nawk: ^ syntax error\nRun Code Online (Sandbox Code Playgroud)\n\n编辑:
\n\n$ cat tst.awk \nfunction my_substr(x,y,z) { return substr(x,y,z) }\n\n{ a="my_substr"; print @a($1,1,4) }\nbolek@bolek-desktop:~/Pulpit$ echo "123456789" | gawk -f tst.awk\ngawk: tst.awk:3: { a="my_substr"; print @a($1,1,4) }\ngawk: tst.awk:3: ^ nieprawid\xc5\x82owy znak \'@\' w wyra\xc5\xbceniu\nbolek@bolek-desktop:~/Pulpit$ \nRun Code Online (Sandbox Code Playgroud)\n
我认为直接在 awk 中不可能做到这一点,但您可以通过使用 shell 获得类似的效果。回想一下,awk 程序是以字符串形式给出的,在 shell 中,字符串只需将它们并排书写即可连接起来。因此,您可以这样做:
a=substr
echo "123456789" | awk '{ print '"$a"'($1, 1, 4) }'
Run Code Online (Sandbox Code Playgroud)
导致1234。