このシナリオがあります
first_arg="$1";
if foo; then
shift 1;
node foo.js "$@"
elif bar; then
shift 1;
node bar.js "$@"
elif baz; then
shift 1;
node baz.js "$@"
else
node default.js "$@"
fi
上記を次のように変更したいと思います。
first_arg="$1";
shift 1;
if foo; then
node foo.js "$@"
elif bar; then
node bar.js "$@"
elif baz; then
node baz.js "$@"
else
unshift 1;
node default.js "$@"
fi
しかし、unshiftのような演算子があるかどうかはわかりませんでした。回避策は次のとおりです。
node default.js "$first_arg" "$@"
ところでこのようにしようとすると変に行動します。
ベストアンサー1
shift 1
まず、を使用する必要はありません。位置パラメータを使用し、そのインデックスを分割してパラメータを渡すだけです。
first_arg="$1"
この操作が完了すると、残りのパラメータはとしてアクセスできます"${@:2}"
。この表記法は、位置引数2をリストの最後まで示す方法です。
あなたの例を使った設定は次のとおりです。
node foo.js "${@:2}"
最後のelse
部分では、次のことを行います。
node default.js "$1" "${@:2}"
"$@"
これは、位置パラメータ変換がない場合と同じです。