2011-05-03 2 views
0

Я хотел бы иметь переменную оболочки, которая может динамически запускаться каждый раз, когда она ссылается, например, я хотел бы иметь переменную $ countPwd, которая могла бы возвращать количество файлов/dirs в текущем каталоге, это могло бы быть определяется как:Как определить динамическую переменную в bash?

countPwd=`ls | wc -l` 

и если я echo $countPwd это только покажет значение, когда я определяю переменную, но она не будет обновляться автоматически, когда я изменить свой текущий каталог. Итак, как я могу определить такую ​​переменную в bash, чтобы ее значение обновлялось/вычислялось на лету?

Обновление: $ PWD - прекрасный пример переменной, полученной в реальном времени. Вам не нужно использовать $() или backticks `` для его оценки. Как это определяется в bash?

+1

Напишите функцию обложки для 'cd', которая устанавливает переменную при изменении каталога. Или создайте скрипт или функцию (возможно, 'fc' для 'file count') и просто используйте это (меньше ввода). –

ответ

6

Сделать функцию:

countPwd() { 
    ls | wc -l 
} 

Затем вызвать функцию, как и любой другой команды:

echo "There are $(countPwd) files in the current directory." 
+0

, но это не переменная, поэтому я все еще не могу выполнить echo $ countPwd. Другими словами, я хотел бы иметь переменную, похожую на $ PWD в bash. $ PWD - прекрасный пример переменной, полученной в реальном времени. Как это определяется? – Sapience

+1

PWD - «продажная переменная»; как-то «встроенный». Также он не оценивается в реальном времени, он задается командой cd (в соответствии с тем, что говорит страница пользователя bash). IMHO обходное решение, предлагаемое с использованием функции bash, неплохо (+1) – hmontoliu

+0

@hmontoliu Спасибо. Я думаю, ваше объяснение о команде cd решит тайну, тогда я думаю, что ответ Джона - мое решение. – Sapience

0

Другой вариант: сохранить команду в переменной, и оценить его при необходимости:

countPwd='ls | wc -l' 
echo $(eval "$countPwd") 
+0

-1 [Действительно ужасная идея] (http://mywiki.wooledge.org/BashFAQ/048). Я знаю, что вы не ошибетесь с номером, но если кто-то изменит значение 'countPwd', вы SOL. – l0b0

+1

@ l0b0 Вы можете сделать countPwd readonly, чтобы облегчить эту проблему. –

0

Вам нужно написать код C: напишите bash's loadable buitins, чтобы сделать тяжелый подъем i n определяющие переменные с динамическими значениями, такими как $SECONDS или $RANDOM ($PWD только что задано cd).

Подробнее в моем ответе here (дубликат этого вопроса).

+0

Если есть хороший дубликат, этот вопрос должен быть закрыт как дубликат. Но по крайней мере вы потратили время, чтобы действительно ответить на этот вопрос. – GhostCat

Смежные вопросы