Я хочу объявить переменную с помощью функции pwd (), которая даст мне текущий путь. Я хочу использовать функцию pwd () как переменную $ {pwd}, что-то вроде этого. Как я должен писать? Спасибо!
Предоставление функций в качестве параметров не предназначено и скоро станет сложным или уродливым. Единственный способ, который я знаю, - через функцию eval. Подход Nykakins не передаёт функцию, а значение, как вы можете видеть в этом примере сравнения:
#!/bin/bash
#
# Test providing a function as parameter
#
function f {
param=$1
echo "-----------------------"
date +%T_%N
sleep 0.3
echo $param
date +%T_%N
}
function e {
param="$1"
echo "-----------------------"
date +%T_%N
sleep 0.3
eval $param
date +%T_%N
}
f $(date +%T_%N)
e "date +%T_%N"
Первый стиль оценивает функцию «дата» перед передачей результата в клиентскую функцию f , как вы можете видеть, потому что второй раз до третьего:
-----------------------
14:00:12_983387321
14:00:12_980980238
14:00:13_287779378
-----------------------
14:00:13_290126185
14:00:13_594301594
14:00:13_596408013
Второй блок показывает, что переданная функция оценивается между двумя вызовами даты в электронной функции.
Возможно, у вас не было такого строгого соглашения об именах при запросе функции как переменной, но я бы сказал, что это делает разницу между функцией как переменной и результатом функции как переменной.
Bash не реализует его, но в противном случае то, что вы точно запрашиваете, то есть используете переменные точно как функции, очень просто реализовать с помощью дисциплинарных функций ksh93, например:
#!/bin/ksh93
function pwd.get
{
.sh.value=$(pwd)
}
cd /var/tmp
echo $pwd
cd /tmp
echo $pwd
в предыдущем скрипте показано:
/var/tmp
/tmp