0

我有一个文件1

1
2
3

此命令打印:

$ awk 'BEGIN{system("cat " 1)}'
1
2
3

.

$ awk 'BEGIN{system( "cat '\''" 1 "'\''") }'
1
2
3

我将文件名从“ 1 ”更改为“ one

我有一个文件

1
2
3

现在,该命令不起作用:

$ awk 'BEGIN{system("cat " one)}' 
|

.

$ awk 'BEGIN{system( "cat '\''" one "'\''") }'
cat: : No such file or directory

为什么现在命令不起作用?

谢谢你的解释。

4

3 回答 3

2

在您的示例中, awk 解释1为文字 1 和one没有值的变量。这意味着system正在尝试执行cat {empty}or cat ''

尝试这个:

awk 'BEGIN{one = "one" ; system("cat " one)}'

或者:

awk 'BEGIN{system("cat one")}'
于 2012-11-13T12:37:21.923 回答
1

如果你的文件名是一个数字,你可以直接在 system() 中写入数字,awk 会在内部将它转换为字符串值。您甚至可以编写表达式来获取数字作为结果。例如:

system("cat "4-3)也应该适用于您的“1”案例。要查看差异,您可以将文件命名为“1+1”然后system("cat "1+1)不起作用,它会抱怨文件“2”不存在。

对于“one”示例:system() 中的“one”不像字符串“one”,而是一个名为“one”的变量。在 awk 中,如果未分配变量,则其默认值为空字符串。

于 2012-11-13T12:38:31.437 回答
1

在 awk 中,1具有的值1和命名的变量one是一个空字符串。"cat" 1字符串也是如此cat 1,但"cat" one字符串也是如此cat。string"cat '\''" one "'\''"是 string cat '',因此您将空字符串作为第一个参数传递给 cat。

于 2012-11-13T12:26:23.627 回答