Как выйти из пробелов и т.д. в переданной переменной для системного вызова CP в awk

В Bash, например, можно использовать UTF-8 как это:

echo $'\xe2\x95\xb1'

который печатает это:

Или можно использовать символы Unicode как это:

echo -e "\U2571"

который печатает это:

4
20.12.2018, 02:15
3 ответа

можно использовать:

awk '...
    cpJpegVariable="cp -r '\''" imageDirectory "'\'' assets";
    ...'

(обратите внимание, что ' не нужно выходить для awk, а нужно '\'' для оболочки). Таким образом, когда awk расширяет переменную cpJpegVariable, это выглядит так:

cp -r 'file_contain space' assets

С помощью этого можно избежать проблем со всеми специальными символами, кроме самого '. Если imageDirectory может содержать одиночные символы кавычек, их можно избежать с помощью gsub(). Пример:

awk '{gsub("'\''","'\''\"'\''\"",imageDirectory)}1'
5
27.01.2020, 20:52

выполнение внешних команд предназначено для оболочки, а не для awk:

while read image_dir __; do
    cp -r "$image_dir" assets
done < file
0
27.01.2020, 20:52

Если вы передаете переменную Awk в систему , вам нужно указать ее в оболочке:

function quote(str,   d, m, x, y, z) {
  d = "\47"; m = split(str, x, d)
  for (y in x) z = z d x[y] d (y < m ? "\\" d : "")
  return z
}

Пример:

system(sprintf("cp -r %s assets", quote($1)))

Source

1
27.01.2020, 20:52

Теги

Похожие вопросы