syn*_*ror 3 shell awk string variable
嗯,这显然是不可能的,我正在尝试它。
但是,这种获取bar作为结果字符串的替代方法有效:
#!/bin/bash
path1=/usr/tmp/foo/bar/baz
awk -F/ '{print $5}' <<< "$path1"
Run Code Online (Sandbox Code Playgroud)
到目前为止一切顺利,但是如果我想没有<<<操作员以及那些臭名昭著的echo | ...管道怎么办?简而言之,我想要做的是将指令path1作为变量传递,并使用字段分隔符和字段标识符(例如)来解析-内部变量,该变量从外部shell 变量中分配了其值。这也可以在“内部”完成吗?-v pa="$path1"-F/$5awk pa path1awk
-v选项或var=value参数的问题awk在于它们不能用于任意数据,因为 ANSI C 转义序列(如\n, \b...)在其中展开(并且在 GNU awk4.2 或更高版本中,如果值以@/并以 结尾/,它被视为正则表达式类型的变量)。
另一种方法是使用ARGVorENVIRON awk数组:
awk -F / 'BEGIN{$0 = ARGV[1]; print $5}' "$path1"
Run Code Online (Sandbox Code Playgroud)
或者:
export path1
awk -F / 'BEGIN{$0 = ENVIRON["path1"]; print $5}'
Run Code Online (Sandbox Code Playgroud)
或者:
path1="$path1" awk -F / 'BEGIN{$0 = ENVIRON["path1"]; print $5}'
Run Code Online (Sandbox Code Playgroud)
现在,如果你想要的只是拆分一个 shell 变量,你可能不需要awk.
在所有 POSIX shell 中:
IFS=/; set -f
set -- $path1
printf '%s\n' "$5"
Run Code Online (Sandbox Code Playgroud)