※当サイトの記事には、広告・プロモーションが含まれます。

シェルスクリプトの関数内でpositional parameter(位置パラメーター)は直接参照できない罠

japan.zdnet.com

⇧ 管理が煩雑にならないなら大歓迎ではありますが...

positional parameter(位置パラメーター)とは?

これといって、公式な情報による説明が見つからんのだけど、

位置パラメータとは, スクリプトが呼び出された際の コマンドライン引数を保持 するための特別な組込み変数である.

https://se.cite.ehime-u.ac.jp/~aman/memo/bash/shell_prog1.html

www.computerhope.com

positional parameter is an argument specified on the command line, used to launch the current process in a shell. Positional parameter values are stored in a special set of variables maintained by the shell.

https://www.computerhope.com/jargon/p/positional-parameter.htm

とあり、シェルでコマンドを実行する際の引数を保持しているものらしい。上記サイト様の説明が正しいとするならば、「positional parameter(位置パラメーター)」はシェルで管理されてるらしい。

シェルはと言うと、

developer.ibm.com

Linuxを構成している一要素ですと。

シェルは、種類が様々であるようですが、

bashがメジャーなんかね?

シェルスクリプトの関数内でpositional parameter(位置パラメーター)は直接参照できない罠

で、「positional parameter(位置パラメーター)」ですが、シェルスクリプトの関数内で直接参照できないという、まさかの罠がありました...

「WSL 2(Windows SubSystem for Linux 2)」の「Oracle Linux 8.7」環境に、「WinSCP」でシェルスクリプトファイルを配置し、「Oracle Linux 8.7」にログインして、配置したシェルスクリプトファイルを実行してみました。

#!/bin/bash

if [ -z "$1" ]; then
  echo "args empty."
fi

readonly value="value"
test="test"

input="$1"
tmp="$1"

select_done () {
if [ -z "${input}" ]; then
  echo "empty" '$input='"${input}"
fi

if [ -z "$1" ]; then
  echo "empty" '$1='"$1"
fi

if [ -z "${tmp}" ]; then
  echo "empty" '$tmp='"${tmp}"
fi

echo "select_done () execute "
echo ${value}
echo ${test}
}

select_done "$value" "$1" "$tmp"
echo "done"

⇧ 実行結果から分かったことは、「positional parameter(位置パラメーター)」については、一旦、変数に格納しないと、関数内からは参照できないらしい...

あと、関数名でエラーになるのがあるな~、シェルスクリプトでも「予約語」みたいな制限あるんかな?って思ってたら、

ytyaru.hatenablog.com

⇧ 上記サイト様で、「予約語」が紹介されていて、『select』は「予約語」になってました。

いや、別に、「予約語」とかあるのは分かったんやけど、

⇧ 全く役に立たないエラーを止めてくれと...

予約語」の前提知識とか無いと、関数名に『select』が使えないのが分からんから...

エラーメッセージを「予約語」を関数名に使えないことが分かるようなものにしてもらえんと、何が悪いのかサッパリ分からんですから...

毎度モヤモヤ感が半端ない...

今回はこのへんで。