Awk
awk 中的語法錯誤
#!/usr/bin/awk userinput='Hello World!' userinput=$userinput awk ' BEGIN { s = ENVIRON["userinput"] "\n" n = length(s) while (1) printf "%s", substr(s,int(1+rand()*n),1) }'
每當我執行上面的程式碼時,我都會收到以下錯誤。
awk:命令。行:1:pass.awk
awk:cmd。line:1: ^ 語法錯誤
#!/usr/bin/awk awk '{ s = $0 "\n" n = length(s) while (1) printf "%s", substr(s,int(1+rand()*n),1) }'
awk:命令。行:1:pass.awk
awk:cmd。line:1: ^ 語法錯誤
我兩次都遇到同樣的錯誤。但是,當我編寫這些程式碼並在終端中執行時,我沒有收到任何錯誤。這對我來說有點奇怪。因為,我是新手
awk
。這可能是一個拼寫錯誤,我不確定。我已將文件名保存為pass.awk
. 以這種方式執行awk pass.awk
,或者,awk pass.awk hello
這裡有兩個問題。首先,如果你想寫一個
awk
腳本,你需要-f
在shebang中使用,因為awk
需要一個文件,而使用這是一種讓你awk
在腳本內容上使用的變通方法。見man awk
:-f progfile Specify the pathname of the file progfile containing an awk program. A pathname of '-' shall denote the standard input. If multiple instances of this option are specified, the con‐ catenation of the files specified as progfile in the order specified shall be the awk program. The awk program can al‐ ternatively be specified in the command line as a single ar‐ gument.
因此,要
awk
在 shebang 中用作您的口譯員,您需要:#!/bin/awk -f BEGIN{print "hello world!"}
你所擁有的是一個正在呼叫的 shell 腳本
awk
,所以你需要一個 shell shebang:#!/bin/sh awk 'BEGIN{ print "Hello world!"}'
下一個問題是您的變數中有一個空格,但使用的是未引用的變數。始終在 shell 腳本中引用變數!你想要的是這樣的:
userinput='Hello World!' userinput="$userinput" awk '...
現在,這是您的第一個(shell)腳本的工作版本:
#!/bin/sh userinput='Hello World!' userinput="$userinput" awk ' BEGIN { s = ENVIRON["userinput"] "\n" n = length(s) while (1) printf "%s", substr(s,int(1+rand()*n),1) }'
請注意,您的
while (1)
意思是腳本永遠不會退出,這是一個無限循環。這是您的第二個腳本作為實際
awk
腳本:#!/usr/bin/awk -f { s = $0 "\n" n = length(s) while (1) printf "%s", substr(s,int(1+rand()*n),1) }