Shell
awk 也可以將欄位標識符用於 shell 字元串(變數)嗎?
好吧,這顯然是我嘗試的方式不可能。
這種獲取bar作為結果字元串的替代方法是有效的,但是:
#!/bin/bash path1=/usr/tmp/foo/bar/baz awk -F/ '{print $5}' <<< "$path1"
到目前為止一切都很好,但是如果我想在沒有
<<<
操作員和那些臭名昭著的echo | ...
管道的情況下做些什麼呢?簡而言之,我想要做的是path1
作為變數與-v pa="$path1"
指令一起傳遞,並使用欄位分隔符-F/
和欄位標識符(例如$5
)來解析awk
-內部pa
變數,該變數的值是從外部path1
shell 變數分配的。這也可以在“內部”完成awk
嗎?
-v
選項或var=value
參數的問題awk
在於它們不能用於任意數據,因為 ANSI C 轉義序列(如\n
,\b
…)在其中擴展(如果值以 GNUawk
4.2 或更高版本開頭,則@/
並以 結尾/
,它被視為變數的正則表達式類型)。另一種方法是使用
ARGV
orENVIRON
awk
數組:awk -F / 'BEGIN{$0 = ARGV[1]; print $5}' "$path1"
或者:
export path1 awk -F / 'BEGIN{$0 = ENVIRON["path1"]; print $5}'
或者:
path1="$path1" awk -F / 'BEGIN{$0 = ENVIRON["path1"]; print $5}'
現在,如果你想要的只是拆分一個 shell 變數,你可能不需要
awk
.在所有 POSIX shell 中:
IFS=/; set -f set -- $path1 printf '%s\n' "$5"