Если вы не заключаете в кавычки EOF
в <<EOF
, расширение выполняется локальной оболочкой внутри документа (, поэтому $(date...)
расширяется с помощью локального date
, а $YY
расширен до значения в локальной оболочке (пустым, если вы не присвоили значение ранее )). Если вы хотите, чтобы содержимое документа -дословно передавалось в удаленную оболочку, вам нужно так или иначе процитировать EOF
:
ssh -T root@IP << 'EOF'
YY=$(date +'%y')
echo "$YY"
EOF
Просто пропустив его через идентификационный фильтр с jq
переформатировать числа, которые имеют .0
десятичную дробь, в целые числа:
$ jq. file.json
[
{
"IMSKU": "1000001",
"AttributeID": 7332,
"Value": "McAfee Host Intrusion Prevention for Desktops safeguards your business against complex security threats that may otherwise be unintentionally introduced or allowed by desktops and laptops. Host Intrusion Prevention for Desktops is easy to deploy, configure, and manage.",
"Unit": null,
"StoredValue": null,
"StoredUnit": null,
"Name": "Marketing text",
"Format": "1",
"Position": "1",
"Group_Name": "Basic Specification",
"AGGroup_Position": 0,
"Product_Hierarchy": 15198001453
},
(etc.)
Если есть числа с десятичными знаками, отличными от нуля, и вы хотите их удалить, используйте
jq '(.. | select(type == "number" )) |= floor' file.json
Это применит функцию floor
ко всем числам в данных, округляя их до ближайшего целого числа.
Также исследовать, есть ли строки, содержащие цифры после точки в самом конце, и удалить эти цифры (и точку):
jq '(.. | select(type == "string")) |= sub("\\.[0-9]+$"; "")' file.json
Затронутые записи по-прежнему будут строками и не будут преобразованы в числовой тип.