猿问

请问如何为awk使用多个参数(即#!)

如何为awk使用多个参数(即#!)

我想执行一个呆子脚本--re-interval用弹簧弹。“天真”的方法

#!/usr/bin/gawk --re-interval -f... awk script goes here

不起作用,因为gawk是用第一个参数调用的。"--re-interval -f"(没有在空格周围分开),它不理解。有解决办法吗?

当然,您不能直接调用gawk,而是将其包装到一个可以拆分第一个参数的shell脚本中,或者创建一个shell脚本,然后调用gawk并将该脚本放入另一个文件中,但是我想知道在一个文件中是否有什么方法可以做到这一点。

在不同的系统中,谢邦线的行为是不同的-至少在西格温它不会将参数拆分为空格。我只关心如何在这样的系统上执行此操作;脚本不应该是可移植的。


有只小跳蛙
浏览 776回答 3
3回答

慕标琳琳

这似乎适用于我(G)awk。#!/bin/sharbitrary_long_name==0 "exec" "/usr/bin/gawk" "--re-interval" "-f" "$0" "$@"# The real awk program starts here{ print $0 }注意#!跑/bin/sh,所以这个脚本首先被解释为一个shell脚本。一开始,我只是尝试"exec" "/usr/bin/gawk" "--re-interval" "-f" "$0" "$@",但是awk把它当作一个命令,无条件地打印出每一行输入。所以我才把arbitrary_long_name==0-它应该总是失败的.你可以用一些乱七八糟的字符串代替它。基本上,我在awk中寻找一个不会对shell脚本产生不利影响的假条件。在shell脚本中,arbitrary_long_name==0定义一个名为arbitrary_long_name并将其设置为等于=0.

Smart猫小萌

我遇到了同样的问题,没有明显的解决方案,因为白空间的处理方式(至少在Linux上是如此)。但是,您可以在一次大爆炸中传递几个选项,只要它们是短期期权他们可以串连(GNU方式)。例如,你不能#!/usr/bin/foo -i -f但你可以#!/usr/bin/foo -if显然,这只在选项有短期等效且不带参数的情况下才有效。
随时随地看视频慕课网APP
我要回答