105.1標準
backup archive.tar.gz source-dirのように呼び出す関数を作る。
第1引数を出力ファイル、第2引数を保存対象としてtar -czfへ渡す。
適切な定義はどれか。
× 不正解
NAME() { commands; }でBash関数を定義し、関数内の$1、$2等は関数呼出しの位置引数になる。引用で空白を含む値を保つ。
詳細解説
正しい
backup() { tar -czf "$1" "$2"; }関数内の$1と$2で呼出時の第1・第2引数を参照する。
正しい。backupの呼出引数が関数ローカルの$1と$2になり、引用したままtarへ渡される。
誤り
backup() { tar -czf "$0" "$1"; }$0は通常関数名ではなくシェルやスクリプト名を表す。
誤り。関数内でも$0は通常、起動したシェルやスクリプト名であり、archive.tar.gzは$1に入る。
誤り
alias backup='tar -czf $1 $2'aliasは関数のような位置引数を持たない。
誤り。alias展開は独自の$1・$2を設定せず、呼出引数を任意位置へ安全に配置できない。
誤り
backup { tar -czf "$1" "$2" }関数名の後の()とコマンド終端がないため、要求するBash関数構文ではない。
誤り。関数名後の()またはfunction予約語と、閉じ波括弧前のコマンド終端が必要である。
実際に確かめる
一時的な検証環境で実行できる例です。
bash --noprofile --norc -c 'backup(){ printf "out=%s src=%s\n" "$1" "$2"; }; backup archive.tar.gz source-dir'期待される結果
out=archive.tar.gz src=source-dir理解のポイント
- 関数構文NAME() { ...; }
- $1は第1引数
- 位置引数を引用
確認時の注意
- 確認環境: GNU Bash 5.2 / 一時関数
基礎のおさらい
関数の位置引数
関数呼出中は$1、$2、$#、$@等が関数の引数を表し、終了後に呼出元の位置引数へ戻る。
引用
"$@"や"$1"を引用すると、空白やglob文字を含む1引数を分割せず渡せる。
問題IDKP-105-612
確認環境GNU Bash 5.2 / 一時関数
最終技術確認2026-08-13
誤り・権利侵害を報告