Проблема с -v
опция или с var=value
аргументы awk
это, они не могут использоваться для произвольных данных начиная с ANSI C escape-последовательности (как \n
, \b
...) расширены в них (и с GNU awk
4.2 или выше, если значение запускается с @/
и концы в /
, это рассматривают как regexp тип переменной).
Альтернатива должна использовать ARGV
или ENVIRON
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}'
Теперь, если все, что Вы хотите, разделяется переменная оболочки, Вам, возможно, не понадобится awk
.
Во всех оболочках POSIX:
IFS=/; set -f
set -- $path1
printf '%s\n' "$5"
Вы должны установить [116060]FS[116061] до того, как [116062]awk[116063] прочитает любой вход. Есть много способов сделать это:
или:
или: