awk中的shell变量不带-v选项,它正在工作
我注意到可以在awk脚本中使用shell脚本变量,如下所示:awk中的shell变量不带-v选项,它正在工作,shell,awk,grep,Shell,Awk,Grep,我注意到可以在awk脚本中使用shell脚本变量,如下所示: var="help" awk 'BEGIN{print "'$var'" }' 有人能告诉我如何在awk内更改var的值,同时保留awk外的值吗 与访问awk中的shell脚本变量类似,我们可以访问awk中的shell数组吗?如果是,怎么做?这是不可能的;您拥有的唯一变体: 使用命令替换并将awk的输出写入变量 将数据写入文件,然后从外壳读取 生成shell输出,然后使用eval执行它 例子 命令替换,一个变量: $ expor
var="help"
awk 'BEGIN{print "'$var'" }'
有人能告诉我如何在awk内更改var
的值,同时保留awk外的值吗
与访问awk中的shell脚本变量类似,我们可以访问awk中的shell数组吗?如果是,怎么做?这是不可能的;您拥有的唯一变体:
- 使用命令替换并将
的输出写入变量李>awk
- 将数据写入文件,然后从外壳读取李>
- 生成shell输出,然后使用
执行它李>eval
$ export A=10
$ A=$(awk 'END {print 2*ENVIRON["A"]}' < /dev/null)
$ echo $A
20
它使用一个文件中介,但它确实起作用:
var="hello world"
cat > /tmp/my_script.awk.$$ <<EOF
BEGIN { print \"$var\" }
EOF
awk /tmp/my_script.awk.$$
rm -f /tmp/my_script.awk.$$
var=“你好,世界”
cat>/tmp/my_script.awk.$$在本例中,您没有在awk脚本中使用变量,而是使用shell变量的值。我只想在shell脚本中整体导出变量,而不是值。。。如果这是不可能的,我可以这样做吗。。。你能看一下下面的代码吗。这里,变量A从shell脚本导出,然后在awk中使用。与相同的情况一样,我可以从awk导出一个变量,并在shell脚本$export a=a$awk END{print ENVIRON[“a”]}中使用它吗export
将变量导出到子进程。无法将变量导出到父进程。在本例中,shell是父对象,AWK是子对象。我的建议是,如果您需要的功能在shell中不可用(如果Igor描述的机制不够),那么您可以用AWK编写整个脚本。对了,伊戈尔,谢谢你的回答@I或者eval能做什么。。我可以用它来打印每个变量吗?不,你不能用eval打印变量;相反:使用awk
打印变量,然后使用eval
将变量导入shell。请将其与我的实例关联起来。我在理解上有点困惑。另外,tmp文件将在主内存或磁盘中的何处创建
var="hello world"
cat > /tmp/my_script.awk.$$ <<EOF
BEGIN { print \"$var\" }
EOF
awk /tmp/my_script.awk.$$
rm -f /tmp/my_script.awk.$$