私はこれら2つの関数をbashスクリプトに持っています。私はただ一つの関数から別の関数にグローバル変数を使わずに直接引数を渡そうとしていますが、それはできないようです。グローバル変数のないbash関数間での配列/リストの受け渡し
function suman {
NODE_EXEC_ARGS= "--inspect";
__handle_global_suman "${NODE_EXEC_ARGS}" "[email protected]"
}
function __handle_global_suman {
# I want $1 to be node exec args and $2 to be args to node script
node $1 ${Z}/cli.js $2;
}
私はを持っています問題:$1
と$2
ため__handle_global_suman
機能では、 値がsuman
関数に渡された元の引数、ない__handle_global_suman
に渡される引数を表すように見えます!私は引数を__handle_global_suman
関数に渡すことができるようにしたい。
一つの解決策は、以下のようなグローバル変数を使用することである(しかし、これは一般的に悪いプログラミングです):
NODE_EXEC_ARGS=""; // default
ORIGINAL_ARGS=""; // default
function suman {
NODE_EXEC_ARGS="--inspect";
ORIGINAL_ARGS="[email protected]"; // assume this captures the arguments passed to this function, not the original script...
__handle_global_suman
}
# ideally there would be a way to make this function truly private
function __handle_global_suman {
# I want $1 to be node exec args and $2 to be args to node script
node ${NODE_EXEC_ARGS} ${Z}/cli.js ${ORIGINAL_ARGS};
}
がうまくいけば、あなたはあなたの私がしようとしているものを見ると助けることができ、感謝
また、__handle_global_suman関数を本当にプライベートにする方法があれば、それはうまくいくでしょう。 –
引数境界情報を失うことなく配列に文字列を割り当てることはできません。 'ORIGINAL_ARGS =" $ @ "'は本質的に壊れています - 文字列ではなく配列だけがその値を安全に保存できます。歩行者の引用符の誤りについては、http://shellcheck.net/を参照してください。 –
...ここには多目的な悪い練習もあります。'function'キーワードはベースラインのPOSIX shシェルと不必要に互換性があります(ほとんどのbash拡張とは異なり、移植可能な形式の上に値を追加しません。これはsuman(){'と 'function'の前にありません)、すべて大文字の変数名はオペレーティングシステムやシェルにとって意味のある変数に対して、POSIX指定の規則によって予約されています。 –