将函数的输出附加到 Bash 中的不同函数

将函数的输出附加到 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/,它不显示附加的序列号。我不完全确定这是为什么?任何关于如何“修复”我的疏忽的意见或建议将不胜感激。提前致谢。

答案1

您有一个输出序列号的函数和另一个输出 URL 的函数。合并两个输出:

url="$(apple_link)$(serial_number)"

或者,在apple_link函数中:

local appleurl="https://support.apple.com/specs/$(serial_number)"

$( ... )扩展为命令的输出。

除此之外唯一需要改变的是删除echo "".

如果你想正确地做到这一点:

serial_number () {
  system_profiler SPHardwareDataType | awk '/Serial/ { print $4 }'
}

apple_link () {
  printf 'https://support.apple.com/specs/%s\n' "$( serial_number )"
}

请注意,无需在任何地方或echo任何事物上使用任何变量。之所以printf存在是因为它是更安全的替代品echo。看为什么 printf 比 echo 更好?

相关内容