Передача CFLAGS для настройки через переменную bash

Попробуйте это, используя с выражением :

#!/bin/sh

for xml in *.xml; do
    bool=$(xmllint --xpath 'count(//*)=1 and string-length(//*[1])=1' "$xml")
    if [ $bool = true ]; then
        echo "$xml" >> xml_list_files
    fi
done

cat xml_list_files

Выражение проверяет, что файл имеет только один узел без какого-либо текстового содержимого. В этом случае команда возвращаетtrue

0
05.02.2020, 23:24
2 ответа

Я думаю, это должно сработать:

CFLAGS="-fPIC -O3"./configure --enable-static --disable-shared --prefix="$PREFIX"

Второй вариант:

CFLAGS="-fPIC -O3"
COMMON_CONFIGURE_OPTIONS="--enable-static --disable-shared --prefix=$PREFIX"

CFLAGS="$CFLAGS"./configure $COMMON_CONFIGURE_OPTIONS
0
28.04.2021, 23:24
CFLAGS="-fPIC -O3"
COMMON_CONFIGURE_OPTIONS="CFLAGS=\"$CFLAGS\" --enable-static --disable-shared --prefix=$PREFIX"
...
"$FOO/configure" $COMMON_CONFIGURE_OPTIONS

Это совершенно неправильно, во-первых, потому что оболочка НЕ ​​продолжает рекурсивно расширять содержимое (, как это делает makeсо своими макросами, за исключением того, что makeникогда не "раскавычивает" их):

a=A; b="B=\"$a\""; printf '<%s>\n' "$b"
<B="A">

и во-вторых, потому что переменные без кавычек будут разделены символами изIFS(пробелов по умолчанию ), что не заботится о кавычках:

a="x \"y z\""; printf '<%s>\n' $a
<x>
<"y>
<z">

Можно, конечно, использовать

eval "$FOO/configure" "COMMON_CONFIGURE_OPTIONS"

(обратите внимание на двойные кавычки вокруг обеих переменных ), но это откроет еще одну банку червей, и вы НЕ ДОЛЖНЫ использовать такие уловки, если вы не очень хорошо владеете всем механизмом синтаксического анализа и расширения и все его причуды, которые, без обид, вам не кажутся.

Решение состоит в том, чтобы забыть о $COMMON_CONFIGURE_OPTIONSерунде и передать все эти опции отдельно:

./configure --enable-static --disable-shared --prefix="$PREFIX" CFLAGS="-fPIC -O3"
0
28.04.2021, 23:24

Теги

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