Ответ 1
Пытаться:
pwd='pwd'
или же
pwd=$(pwd)
Обратите внимание, что после знака равенства не должно быть пробелов.
Также, как указывает г-н Вайс; вы не присваиваете $pwd
, вы присваиваете pwd
.
У меня возникла проблема поместить содержимое команды pwd
в переменную оболочки, которую я буду использовать позже.
Вот мой код оболочки (цикл не останавливается):
#!/bin/bash
pwd= `pwd`
until [ $pwd = "/" ]
do
echo $pwd
ls && cd .. && ls
$pwd= `pwd`
done
Не могли бы вы заметить мою ошибку, пожалуйста?
Пытаться:
pwd='pwd'
или же
pwd=$(pwd)
Обратите внимание, что после знака равенства не должно быть пробелов.
Также, как указывает г-н Вайс; вы не присваиваете $pwd
, вы присваиваете pwd
.
В оболочке вы назначаете переменную без знака доллара:
TEST=`pwd`
echo $TEST
что лучше (и может быть вложенным), но не настолько переносим, как выходы:
TEST=$(pwd)
echo $TEST
Всегда помните: знак доллара используется только при чтении переменной.
В этом конкретном случае обратите внимание, что bash имеет переменную, называемую PWD
, которая содержит текущий каталог: $PWD
эквивалентен до `pwd`
. (Так же, как и другие оболочки, это стандартная функция .) Итак, вы можете написать свой script следующим образом:
#!/bin/bash
until [ "$PWD" = "/" ]; do
echo "$PWD"
ls && cd .. && ls
done
Обратите внимание на использование двойных кавычек вокруг ссылок на переменные. Они необходимы, если переменная (здесь, текущий каталог) содержит пробельные символы или подстановочные знаки (\[?*
), поскольку оболочка разбивает результат разложения переменных на слова и выполняет подталкивание этих слов. Всегда разворачивать разметку переменных "$foo"
и замену команд "$(foo)"
(если вы специально не знаете, что вам не нужно).
В общем случае, как уже упоминались другие ответы:
var=value
, not var = value
$
означает "принять значение этой переменной", поэтому вы не используете его при назначении: var=value
, а не $var=value
Вы также можете делать более сложные команды, чтобы округлить примеры выше. Итак, скажем, я хочу получить количество процессов, запущенных в системе, и сохранить их в переменной ${NUM_PROCS}.
Все, что вам нужно, это генерировать конвейер команд и выводить его (количество процессов) в переменную.
Это выглядит примерно так:
NUM_PROCS=$(ps -e | sed 1d | wc -l)
Я надеюсь, что это поможет добавить некоторую полезную информацию в это обсуждение.
Здесь ваш script...
DIR=$(pwd)
echo $DIR
while [ "$DIR" != "/" ]; do
cd ..
DIR=$(pwd)
echo $DIR
done
Обратите внимание на пробелы, использование кавычек и знака $.