我想简化 awk 命令以供常见使用,因此不必awk '{print "rm -r"$4 }'
每次我想写时都写myawk "rm -r"$4
.我试过写这样的函数
myawk() { awk '{ print $1 }' }
它不起作用..
我怎样才能在Ubuntu中编写这样的函数?
答案1
要将字符串从 shell 脚本传递到嵌入式 awk 脚本,请使用 awk 变量和参数-v
。
myawk () {
awk -v mystring="$1" '{ print mystring }'
}
另一种可能性是将字符串放入环境变量中并通过数组访问它ENVIRON
。
答案2
尝试使用双引号而不是单引号。 http://www.gnu.org/s/bash/manual/html_node/Double-Quotes.html
或者这样写:
myawk () { awk '{print '"$1"' }'; }
但我可以看到尝试包含原始用户字符串会产生很多不良副作用。例如:
myawk '"hello"; system("echo there")"
这将被评估为awk '{print "hello"; system("echo there") }'
,可能会显示“hello”和“there;但如果没有正确转义,可能会发送更多恶意命令。
答案3
alias awk="awk '{print $1 }'"
添加到 .bashrc 文件怎么样?