コマンドプロンプトでセットした環境変数に空白が含まれる
◆ set のあとに && でつないでコマンド実行するときに注意
環境変数を指定してコマンドを実行したいなーと思って こんな感じのことをしてみました
すると
'BAR '
なんか空白が入ってます!
そこ取り除いてくれないんですね……
これまでこういう使い方したことあったと思うのですが 今になってこんな仕様だったのを知りました
PowerShell だと
のように文字列はクオートが必要なので この問題は起きないです
それにセミコロンで区切るのでスペースをあけないです
コマンドプロンプトの && は成功確認するのに対して PowerShell の ; は成功確認しません
環境変数指定で失敗はなさそうですし コマンドプロンプトも成功確認しないようにしてもいいのですが そうしても使う記号は & が 1 つです
結局スペースをあけたくなります
[a.js]
これを実行して foo の後にスペースがあるか確認します
結果は
入ってませんでした
環境変数のみの仕様みたいですね
set FOO=BAR && node
すると
C:\Users\user1>set FOO=BAR && node
Welcome to Node.js v12.6.0.
Type ".help" for more information.
> process.env.FOO
'BAR '
>
'BAR '
なんか空白が入ってます!
そこ取り除いてくれないんですね……
これまでこういう使い方したことあったと思うのですが 今になってこんな仕様だったのを知りました
PowerShell だと
$env:FOO="BAR"; node
のように文字列はクオートが必要なので この問題は起きないです
それにセミコロンで区切るのでスペースをあけないです
コマンドプロンプトの && は成功確認するのに対して PowerShell の ; は成功確認しません
環境変数指定で失敗はなさそうですし コマンドプロンプトも成功確認しないようにしてもいいのですが そうしても使う記号は & が 1 つです
結局スペースをあけたくなります
追記
もしかして普通の引数も?と思って試してみました[a.js]
console.log(`"${process.argv[2]}"`)
node a.js foo && echo 1
これを実行して foo の後にスペースがあるか確認します
結果は
"foo"
入ってませんでした
環境変数のみの仕様みたいですね