Путь реестра для Visual Studio 2008 является тем же, но с 9,0 как номер версии:
HKEY_CURRENT_USER\Software\Microsoft\VisualStudio\9.0\Text Editor
As others have stated, the problem is that the single quotes prevent expansion of the variable. However, using $()
allows you to use double quotes:
echo " Number is: $(grep "Multiple_Frame = echo **$var**" 20mrf.txt | wc -l)" >>statisic.txt
although I suspect something like this is what you meant:
echo " Number is: $(grep "Multiple_Frame = $var" 20mrf.txt | wc -l)" >>statisic.txt
You should also be aware that grep
has an option to output the count so you can omit wc
:
echo " Number is: $(grep -c "Multiple_Frame = $var" 20mrf.txt)" >>statisic.txt
@OP, делать то, что вы делаете таким образом, довольно неэффективно. Вы вызываете grep и wc 20 раз для одного и того же файла. Откройте файл только один раз и получите все, что хотите, за 1 итерацию содержимого файла. Пример в bash 4.0
declare -A arr
while read -r line
do
case "$line" in
*"Multiple_Frame ="*)
line=${line#*Multiple_Frame = }
num=${line%% *}
if [ -z ${number_num[$num]} ] ;then
number_num[$num]=1
else
number_num[$num]=$(( number_num[$num]+1 ))
fi
;;
esac
done <"file"
for i in "${!number_num[@]}"
do
echo "Multiple_Frame = $i has ${number_num[$i]} counts"
done
аналогично, вы можете использовать ассоциативные массивы в gawk, чтобы помочь вам в решении этой задачи.
gawk '/Multiple_Frame =/{
sub(/.*Multiple_Frame = /,"")
sub(/ .*/,"")
arr["Multiple_Frame = "$0]=arr["Multiple_Frame = "$0]+1
}END{
for(i in arr) print i,arr[i]
}' file
Каждую замену нужно сохранять в переменной. Примерно так:
#!/bin/bash
for ((var=0; var < 20; var++))
do
count=`grep "Multiple_Frame = $var" 20mrf.txt | wc -l`
echo " Number is: $count" >> statisic.txt
done
Хорошо, вторая [sic] проблема связана с цитированием в строке 5. Ссылка на $ var никогда не будет расширена, потому что она заключена в одинарные кавычки. Вы можете исправить это, заменив одинарные кавычки ( '
Первая [sic] проблема заключается в том, что вы пытаетесь сделать слишком много в одной строке, что вызывает проблему с вложением кавычек. Разбейте строку на несколько команд, сохраняя промежуточные результаты по мере необходимости. Да, он может работать немного медленнее, но вы сэкономите МНОГО времени на его отладку и поддержку.
Второй закон трейдера: если вам нужно выбирать между оптимизацией для повышения производительности и оптимизацией для удобства обслуживания, ВСЕГДА выбирайте код более удобен в обслуживании. Компьютеры все время становятся быстрее; Программисты этого не делают.
Строка внутри $ (...) заключена в одинарные кавычки ( '...'
). Эти кавычки предотвращают расширение переменной. Вместо этого используйте двойные кавычки. В вашем случае:
#!/bin/bash
for ((var=0; var<20; var++))
do
echo " Number is: $(grep 'Multiple_Frame = echo **'"$var"'**' 20mrf.txt | wc -l)" >>statisic.txt
done
Обратите внимание, что в этом примере кажется, что двойные кавычки для команды echo
уже открыты, но вы должны отметить, что $ (...)
вычисляется первым, и внутри него нет двойных кавычек. Таким образом, изменение здесь состоит в том, чтобы закрыть одинарную кавычку grep
вместо открытой двойной кавычки, а затем закрыть двойные кавычки и снова открыть одинарную кавычку.
Это длинное объяснение иллюстрирует преимущества разделения выражения на части, как предполагают другие ответы.