1. ホーム
  2. bash

[解決済み] 関数内で呼び出し元のコマンドライン引数にアクセスするには?

2022-03-05 17:40:09

質問

bashでスクリプトのコマンドライン引数にアクセスする関数を書こうとしていますが、引数は関数への位置引数に置き換えられています。コマンドライン引数が明示的に渡されない場合、関数がコマンドライン引数にアクセスする方法はあるのでしょうか?

# Demo function
function stuff {
  echo $0 $*
}

# Echo's the name of the script, but no command line arguments
stuff

# Echo's everything I want, but trying to avoid
stuff $*

解決方法は?

私の読みでは Bashリファレンスマニュアル には、このようなものが含まれていると書かれています。 BASH_ARGV , スタックについてたくさん書かれていますが。

#!/bin/bash

shopt -s extdebug

function argv {
  for a in ${BASH_ARGV[*]} ; do
    echo -n "$a "
  done
  echo
}

function f {
  echo f $1 $2 $3
  echo -n f ; argv
}

function g {
  echo g $1 $2 $3
  echo -n g; argv
  f
}

f boo bar baz
g goo gar gaz

保存先 f.sh

$ ./f.sh arg0 arg1 arg2
f boo bar baz
fbaz bar boo arg2 arg1 arg0
g goo gar gaz
ggaz gar goo arg2 arg1 arg0
f
fgaz gar goo arg2 arg1 arg0