タイトルがわかりにくすぎる。
なに
cliツールを書いている。 bin/cli
はシェルスクリプト。
bin/cli hogefuga --arg='volume 30'
みたいなのコマンドを打ったときこのシェルスクリプトを経由して
./script.js $@
$@
の記述で、nodeのスクリプトに引数を横流しで渡していた。
すると、 process.argv
の中身がおかしくなる。
const [node, app, ...args] = process.argv console.log('args', args)
の結果が、
[ 'hogefuga', '--arg=volume', '30' ]
になって困ってしまった。
volume 30
のスペースの部分で分割されてしまっている。そんな意図はしていない……。 '--arg=parity 123'
であってくれ…。
解決
$@
をダブルクオートで囲えばOKだった。
./script.js "$@"
こうすると引数が分割されずに期待通りになる。
[ 'hogefuga', '--arg=parity 123' ]
bash謎仕様すぎる。