デバッグしたい巨大なスクリプトがあり、構造は次のとおりです。
var "-p Some Parameter" || return 1
var "-p Other Parameter" || return 0
私はそれが実際に何をしているのか知りたいです(そして、どのvarからエラーメッセージを受け取るので、それが何であるかを知っています)。ただし、そうすると空のecho $var
文字echo ${var}
列が提供されます。echo "${!var}"
機能しない場合(「構文エラー:誤った置換」)
eval e="\$$var"
echo $e
「$」のみが印刷されます。
Ashの変数が実際に同じかどうかを調べる方法はありますか?それとも、スクリプト(Alpineで利用可能)によって実行される実際のコマンドを表示できる一種のトレースはありますか?
ベストアンサー1
var "-p Some Parameter" || return 1
ash
POSIXに似たシェルと見なされるので、引数としてvar
文字列-p Some Parameter
を使用して名前付きコマンドを実行します(そして終了ステータスreturn
によって呼び出されることもあります)。何が起こるかは、完全に何がvar
起こるかに依存します。
これにより、空の文字列が提供されます
echo $var
。echo ${var}
これにより、変数が$var
設定されていないか空白になる可能性があります(またはスペースのみを含めることができます)。echo "${var+var is set}"
これが重要な場合は、設定されていることを確認してください。
ただし、名前付き変数は、名前付きvar
コマンドまたは関数とは関係ありませんvar
。
echo "${!var}"
変数の値に拡張される間接変数を拡張するためのBashism。にちなんで命名変数var
標準ではないため、エラーが発生する可能性が高くなります。
eval e="\$$var"
echo $e
これが何をすべきかわかりません。変数の値をvar
変数に割り当ててe
から印刷するように見えますが、変数にスペースが含まれている場合は割り当てが中断されます。