Поскольку кто-то ответил за ответ для 4.6 --для версии 4.4, если вы зависите от 32-битного RPM, чтобы обойти трудности или отсутствие синтаксиса, это может работать для других:
Requires: /lib/libc.so.6
Поскольку этот файл предоставляется 32-разрядной версией glibc, при установке будет установлена правильная зависимость.
Сделайте так:
variable="but put shell variable in double quotes"
echo 'Put most of the awk script in single quotes so that $s are not expanded, '"$variable"', then continue in single quotes.'
Тем не менее, пожалуйста, прочтите комментарий @Paul _Pedant о внедрении кода в программу.
Я бы использовал одинарные кавычки для awk. Не проверено
#!/bin/bash
cat $1.txt | awk '{cmd="pwgen 10 1"; cmd | getline pass; print substr($0, 1, length($0) -1) ">> ~/dresses/whole-dresses-shape/'$1'-" pass ".jpg"; close(cmd);}' | bash
Вот несколько способов сделать это более аккуратно (использование printf
вместо print
+ конкатенация строк — это вопрос личных предпочтений -Я считаю, что это более читабельно в этом дело ).
экспортировать значение $1
и использовать массив awk ENVIRON
, например.
#!/bin/bash
export var="$1"
cat "$1.txt" | awk '
BEGIN{cmd="pwgen 10 1"}
{
cmd | getline pass;
printf "%s >> ~/dresses/whole-dresses-shape/%s-%s.jpg\n", substr($0, 1, length($0) -1), ENVIRON["var"], pass;
close(cmd);
}
'
используйте параметр командной строки -v
для передачи значения $1
напр.
#!/bin/bash
cat "$1.txt" | awk -v var="$1" '
BEGIN{cmd="pwgen 10 1"}
{
cmd | getline pass;
printf "%s >> ~/dresses/whole-dresses-shape/%s-%s.jpg\n", substr($0, 1, length($0) -1), var, pass;
close(cmd);
}
'
Оба они заменяют внешние «мягкие» кавычки «жесткими». Дополнительным -преимуществом является то, что он освобождает слой цитирования на случай, если вы хотите защитить выходные строки от разбиения слов -(возможно, хорошая практика -, так как вы, очевидно, передаете результат в оболочку ), напр.
printf "\"%s\" >> ~\"/dresses/whole-dresses-shape/%s-%s.jpg\"\n"
Обсуждение -v
и ENVIRON
см. в