你能用这个脚本帮我吗?
#!/bin/bash
data=`date '+%Y %m %d'`
data2=" 7 0 0"
string=$data$data2
awk -v str=$string '{print mktime("str");}'
我得到了这个输出:
awk: cmd. line:1: fatal: cannot open file `09' for reading (No such file or directory)
答案 0 :(得分:2)
你不应该在awk中引用str
,否则它被视为文字字符串。您还必须正确引用shell变量。
#!/bin/bash
data=$(date '+%Y %m %d')
data2=" 7 0 0"
string="$data$data2"
awk -v str="$string" 'BEGIN {print mktime(str)}'
答案 1 :(得分:0)
@anubhava有正确的答案。原因如下:在变量替换之后,shell会在代码中看到这一行:
awk -v str=2014 01 09 7 0 0 '{print mktime("str");}'
因此,您将“2014”作为“str”变量传递,您的awk脚本为“01”(这是一个有效的awk程序,将打印每一行),并传递文件参数“09”,“ 7“,...因此错误”无法打开文件`09'进行阅读“
课程:在shell脚本编写中,除非您知道何时不要,始终引用您的"$variables"
。
答案 2 :(得分:0)
你想要这个:
div[@class="price"]
span[@class="originalRetailPrice"]
行的另一种替代方法是:(这样做的好处是可以处理缺少#!/bin/bash
data="`date '+%Y %m %d'`"
data2=" 7 0 0"
string="$data$data2"
awk -v str="$string" 'BEGIN {print mktime(str);exit;}'
选项的旧awk
版本,例如Solaris 10 awk
(他们往往会错过-v
))
/usr/bin/awk
需要BEGIN块才能使mktime
在启动时运行代码而不是每个输入行。
在等待输入之前需要awk "BEGIN {print mktime(\"$string\");exit;}"
才能退出。 (似乎没有它在GAWK上工作)
需要引号将变量作为单个条目传递... This overview of shell quoting对于尝试shell脚本的任何人来说都是重要的读物......
需要省略awk
代码中的引号以获取awk以使用变量exit
而不是字符串awk
。
您可能还想用str
替换反引号(``),在复杂的嵌套情况下读取更容易,并且在所有现代shell中都支持(看起来它可能在POSIX标准中) ,我没有检查过......)..(虽然这不会影响代码)