Переменная, не расширяющаяся в другом переменном ударе

Символьная ссылка (иначе гибкая ссылка, иначе символьная ссылка) является файлом, который содержит просто путь к другому файлу.

Вы создаете его с ln -s <target> <linkname> например. ln -s /path/to/your/django/django-admin.py /usr/local/bin/django-admin.py.

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

Файл связей не является копией, таким образом, место не занято дважды. Как лютик золотистый, на который уже указывают, убедиться использовать -s или иначе Вы получаете так называемую жесткую ссылку с очень отличающимися свойствами.

6
02.04.2015, 17:03
3 ответа

Вы можете использовать EVAL , но следующий сопровождающий будет проклинать ваше имя. Вы пытались просто добавить переменную при использовании анализируемых данных или расширения переменной, когда создает данные?

Если файл создан таким образом, не может ли вы просто использовать некоторые [отредактированные] методы Чтобы убедить отправителя изменить свои злые пути?

Если изменение буквально невозможно, то вы должны иметь контроль над тем, какие переменные возможны. В противном случае ваш скрипт уязвим для всех видов нагрузочных атак, таких как входы, такие как 3 | Whume1.txt | $ (RM -ARR --eff /) / Операция / . Поскольку вы , очевидно, имеют то, что под контролем, вы можете сделать некоторые буквальные замены переменных со своими значениями в случае в случае основы:

IFS='/' read -a pathnames <<< "$fpath"
for pathname in "${pathnames[@]}"
do
    if [ "${pathname::1}" = '$' ]
    then
        variable_name="${pathname:1}"
        printf '%s' "${!variable_name}"
    else
        printf '%s' "$pathname"
    fi
done

с некоторой дополнительной котельной, чтобы добавить кособыки между пафорами.

6
27.01.2020, 20:23

Переменная экспансия происходит только один раз и не рекурсивна.

Вы можете расширить значение самостоятельно:

resource=/data/bscs
fpath='$resource/operation'
echo ${fpath/'$resource'/$resource}

Обратите внимание, что это намного безопаснее, чем EVAL , поскольку все возможные переменные для замены должны быть перечислены в коде.

3
27.01.2020, 20:23

Вы также можете использовать косвенное расширение переменной

$fpath=`echo $resource/operation`
echo ${!fpath}

. Это расширит значение ресурса внутри PPATH.

4
27.01.2020, 20:23

Теги

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