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を出力する別の関数があります。 2つの出力を結合します。

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より優れているのですか?

おすすめ記事