Использование функции bash из скрипта - PullRequest
0 голосов
/ 17 апреля 2020

Как правильно назначить вывод lowercase_last2 другой переменной? Что я делаю ниже?

У меня есть сценарий оболочки test_lowercase_last.sh, который определяет пару функций

#!/bin/bash

function lowercase_last2() (
    PART2=/"${1##*/}"
    PART1=${1%"$PART2"}
    PART2_LOWER=$(echo "$PART2" | tr '[:upper:]' '[:lower:]')
    echo ${PART1}${PART2_LOWER}
)

function basic() (
    echo "Testing"
)

, и другой сценарий, который означает их использование

#!/bin/bash
echo $(basic)
echo $(lowercase_last /home/santiago/Test)

Но это то, что я получаю

$ source test_lowercase_last.sh
$ ./test_bash_func.sh
./test_bash_func.sh: line 2: basic: command not found

./test_bash_func.sh: line 3: lowercase_last: command not found

Я на самом деле имею в виду присвоить вывод lowercase_last2 другой переменной, но я думаю, как только я получу это право, это должно быть просто. Тогда вопрос.

1 Ответ

3 голосов
/ 17 апреля 2020

Исходная библиотека в используемом вами сценарии из :

#!/bin/bash
source test_lowercase_last.sh

echo "$(basic)"
echo "$(lowercase_last /home/santiago/Test)"

Если вы не используете export -f lowercase_last basic для экспорта своих функций в среду, они не наследуются автоматически отдельными снаряды. ( Подоболочки наследуют копии внутреннего состояния; но они fork() редактируются без вызова exec(); когда вы запускаете новый скрипт, он пересекает границу exec, поэтому он не имеет доступа к неэкспортированным переменным исходного процесса).


Кстати - см. BashPitfalls # 14 re: почему аргументы echo всегда должны заключаться в кавычки, если не константа (и, кроме того, последняя таблица в https://wiki.bash-hackers.org/scripting/obsolete, в которой обсуждаются параметры синтаксиса объявления функции).

...