シェルスクリプトで、関数の返り値をreturn
で返す場合、文字列を返すとエラーになる
test.sh
#!/bin/bash
function GET_COMMAND(){
ARG1=${1}
str="command_${ARG1}"
return ${str}
}
CMD=`GET_COMMAND 1`
echo ${CMD}
CMD=`GET_COMMAND 2`
echo ${CMD}
$ bash test.sh
test.sh: line 6: return: command_1: numeric argument required
test.sh: line 6: return: command_2: numeric argument required
関数の返り値をecho
で返すと返せる(これで良いのか?という疑問は残る。。)
コメント欄のご指摘を受けて表現を取り消しました。誤解を招くような記載ですみません。
「他のプログラミング言語での return のような機能を模倣するために、関数名
や $(関数名) によるコマンド置換 ( 出力のキャプチャ ) を利用する」
以下のようにすることで、returnで文字列を返すような機能を模倣する。
test.sh
#!/bin/bash
function GET_COMMAND(){
ARG1=${1}
str="command_${ARG1}"
echo ${str}
}
CMD=`GET_COMMAND 1`
echo ${CMD}
CMD=`GET_COMMAND 2`
echo ${CMD}
$ bash test.sh
command_1
command_2
ファイルを分けたければ、別ファイル(例えば、common.sh
)に記述してsource
等で読み込んでおくと良い。
https://atmarkit.itmedia.co.jp/ait/articles/1712/21/news015.html
common.sh
#!/bin/bash
function GET_COMMAND(){
ARG1=${1}
str="command_${ARG1}"
echo ${str}
}
test.sh
#!/bin/bash
source common.sh # common.shを呼び出す
CMD=`GET_COMMAND 1`
echo ${CMD}
CMD=`GET_COMMAND 2`
echo ${CMD}
$ bash test.sh
command_1
command_2
以上
参考