我有一个文件 1 :
1
2
3
此命令打印:
$ awk 'BEGIN{system("cat " 1)}'
1
2
3
$ awk 'BEGIN{system( "cat '\''" 1 "'\''") }'
1
2
3
我将文件名从“ 1 ”更改为“ 1 ”
我有一个文件一个:
1
2
3
现在,该命令不起作用:
$ awk 'BEGIN{system("cat " one)}'
|
$ awk 'BEGIN{system( "cat '\''" one "'\''") }'
cat: : No such file or directory
为什么现在命令不起作用?
感谢您的解释。
答案 0 :(得分:2)
在您的示例中,awk将1
解释为文字1,将one
解释为没有值的变量。这意味着system
正在尝试执行cat {empty}
或cat ''
。
试试这个:
awk 'BEGIN{one = "one" ; system("cat " one)}'
或:
awk 'BEGIN{system("cat one")}'
答案 1 :(得分:1)
在awk中,1
的值为1
,名为one
的变量为空字符串。因此"cat" 1
是字符串cat 1
,但"cat" one
是字符串cat
。字符串"cat '\''" one "'\''"
是字符串cat ''
,因此您将空字符串作为cat的第一个参数传递。
答案 2 :(得分:1)
如果您的文件名是数字,您可以直接在system()中写入数字,awk会在内部将其转换为字符串值。你甚至可以写表达式来获得数字作为结果。例如:
system("cat "4-3)
也适用于您的“1”案例。要查看差异,您可以将文件命名为“1 + 1”,然后system("cat "1+1)
将无效,它会抱怨文件“2”不存在。
对于“one”示例:系统中的“one”()不像字符串“one”,而是名为“one”的变量。在awk中,如果未分配变量,则其默认值为空字符串。