Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/13.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
awk中的shell变量不带-v选项,它正在工作_Shell_Awk_Grep - Fatal编程技术网

awk中的shell变量不带-v选项,它正在工作

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

我注意到可以在awk脚本中使用shell脚本变量,如下所示:

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.$$