Я работаю над сценарием для получения серийного номера с хоста под управлением OS X, а затем добавляю его в конец URL.
#!/bin/bash
# Retrieve serial number in OS X, then append serial number to URL
### Retrieve serial number ###
function serial_number(){
local serialnum=$(system_profiler SPHardwareDataType | awk '/Serial/ {print $4}')
# Use system_profiler to poll info, then print 4th column of Serial from SPHardwareDataType
# write_header "Serial Number"
echo "${serialnum}"
echo ""
}
### Append serial number to URL ###
function apple_link(){
local appleurl=$"https://support.apple.com/specs/${serialnum}"
echo "${appleurl}"
echo ""
}
### Testing ###
apple_link
В результате я получаю следующее: https://support.apple.com/specs/
, который не показывает добавленный серийный номер. Я не совсем понимаю, почему так происходит?
Любые комментарии или предложения о том, как "исправить" мой недосмотр, будут очень признательны. Заранее спасибо.
У вас есть одна функция, которая выводит серийный номер, а другая - URL. Чтобы объединить два вывода:
url="$(apple_link)$(serial_number)"
Или в функции apple_link
:
local appleurl="https://support.apple.com/specs/$(serial_number)"
$ (...)
будет расширен до вывода команды.
Единственное, что нужно изменить, кроме этого, - удалить эхо ""
.
Если вы хотите сделать это правильно:
serial_number () {
system_profiler SPHardwareDataType | awk '/Serial/ { print $4 }'
}
apple_link () {
printf 'https://support.apple.com/specs/%s\n' "$( serial_number )"
}
Обратите внимание, что нет необходимости нигде использовать какие-либо переменные или выводить
что-нибудь. printf
существует, потому что это более безопасная альтернатива echo
. См. Почему printf лучше, чем echo?