Добавление вывода функции к другой функции в Bash

Я работаю над сценарием для получения серийного номера с хоста под управлением 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/, который не показывает добавленный серийный номер. Я не совсем понимаю, почему так происходит? Любые комментарии или предложения о том, как "исправить" мой недосмотр, будут очень признательны. Заранее спасибо.

0
08.02.2017, 18:37
1 ответ

У вас есть одна функция, которая выводит серийный номер, а другая - 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?

1
28.01.2020, 02:46

Теги

Похожие вопросы