bash: различное количество строк новой строки при назначении результата переменной [duplicate]
На этот вопрос уже есть ответ здесь:
Проверьте количество запущенных скриптов, используя ps 4 ответаскажем, я хочу посмотреть, сколько копий программы уже запущено. Я мог бы сделать что-то вроде этого:
ps ax | grep -c "$0"
эта команда сама по себе дает ожидаемый результат. НО, если я пытаюсь присвоить вывод переменной, он увеличивается на единицу! Как бы я ни старался:
var=$(ps ax | grep "$0" | sed -n '$=')
var=`ps ax | grep -c "$0"`
Может кто-нибудь, пожалуйста, покажите мне правильный способ получения правильного вывода?
также было бы здорово узнать, почему это происходит ..
ОБНОВЛЕНИЕ после первого ответа от @fedorqui я понимаю, что я не был достаточно ясен. позвольте мне уточнить:
Я запускаю все три команды выше в одном и том же скрипте bash. Когда я запускаю первый, он печатает номер 2: сама программа и процесс grep с этой программой в качестве аргумента. когда я выполняю те же команды в назначениях переменных, число 3 сохраняется.
обратите внимание, что я использую два разных метода подсчета строк, grep и sed. в обоих случаях они возвращают 3 вместо правильного ответа, 2.
Вот сводный пример, чтобы попробовать в файле test.sh:
echo -n "without assignment: "
ps ax | grep -c "$0"
var=$(ps ax | grep "$0" | sed -n '$=')
echo "using sed method: $var"
var=`ps ax | grep -c "$0"`
echo "using grep method: $var"
результаты на моей коробке Debian:
without assignment: 2
using sed method: 3
using grep method: 3
снова вопросы: почему это происходит, и как предотвратить или обойти?