Нет, это связано с тем, что переменная $MyEnv
без кавычек разделяется и обрезается последовательностями символов [1] из переменной IFS
, которыми по умолчанию являются пробел (\x20
), табуляция(\x09
)и новая строка. (\x0a
), а затем echo
при записи полей он был разбит на соединенные пробелами(\x20
).
Чтобы увидеть эти символы, заключите переменную $MyEnv
в кавычки и используйте printf
вместоecho -n
[2]
$ printf %s "$MyEnv" | hexdump -Cv
...
00000040 0a 09 0a 0d |....|
00000044
Обратите внимание, что обычно вы не можете хранить двоичные данные в переменных среды --двоичные данные могут содержать байты NUL (\0
), а значения переменных среды являются строками, завершающимися нулем -. Байты NUL также не работают во внутренних (не -не экспортируемых )переменных bash
.
[1] Если символ из IFS не является «пробелом», оболочка может фактически разделить на один символ и создать пустые поля. Полное описание приведено в разделе стандарта Field Splitting .
[2] echo
из стандартной оболочки может интерпретировать некоторые символы обратной косой черты (, например. \n
на новую строку и т. д. ), возможно, еще больше испортит вашу переменную.
Попробуйте этот awk:
awk '
NR==FNR{s1[$3]=$1;next}
{s2[$3]=$1}
END{
for (value in s1){
if (s1[value]!=s2[value]) print s1[value]-s2[value],$2,value
}
}
' ram-service1.txt ram-service2.txt | column -t > outfile
column
просто помещает вывод в удобный формат "диаграммы" и сохраняет его в outfile
.