Как объявить функции как переменные

Я хочу объявить переменную с помощью функции pwd (), которая даст мне текущий путь. Я хочу использовать функцию pwd () как переменную $ {pwd}, что-то вроде этого. Как я должен написать? Спасибо!

2
задан 14 July 2013 в 21:06

3 ответа

Использовать подстановку команд:

$ myvar=$(pwd)
$ echo $myvar
/etc
$ echo $(pwd)
/etc
0
ответ дан 14 July 2013 в 21:06

Предоставление функций в качестве параметров не предназначено и скоро станет хитрым или уродливым. Единственный способ, которым я знаю, - через функцию 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"

Первый стиль оценивает функцию date перед передачей ее результата клиентской функции 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

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

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

0
ответ дан 14 July 2013 в 21:06

Bash не реализует его, но в противном случае то, что вы в точности просите, то есть использовать переменные именно как функции, очень просто реализовать с помощью дисциплинарных функций ksh93, например:

#!/bin/ksh93

function pwd.get
{
    .sh.value=$(pwd)
}

cd /var/tmp
echo $pwd
cd /tmp
echo $pwd

При выполнении предыдущий сценарий показывает:

/var/tmp
/tmp 
0
ответ дан 14 July 2013 в 21:06

Другие вопросы по тегам:

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