![入力変数にスペースがありますか? [コピー]](https://linux33.com/image/121727/%E5%85%A5%E5%8A%9B%E5%A4%89%E6%95%B0%E3%81%AB%E3%82%B9%E3%83%9A%E3%83%BC%E3%82%B9%E3%81%8C%E3%81%82%E3%82%8A%E3%81%BE%E3%81%99%E3%81%8B%EF%BC%9F%20%5B%E3%82%B3%E3%83%94%E3%83%BC%5D.png)
以下を含むスクリプトがあるとしましょう。
command $1
また、オプションのパラメータがあることが示されているので、command
これも可能ですcommand $1 $2
。
ここにスペースがあると$1
どうなりますか?(仮定しよう$1=A B
)?コマンドはthatと解釈されますかcommand A B
、それともcommand A\ B
単一の変数はどこにありますか?A B
答え1
通常、$1
スペースが含まれていて二重引用符で囲まれていない場合は、複数入力トークンとして解釈されます。単一のトークンとして解釈するには、二重引用符で囲みますcommand "$1" $2
。つまり、デフォルトではトークンを区切るためにスペースが使用されるためです。この動作は環境変数の値を設定することで変更できますIFS
。詳細については、Advanced Bash Scripting Guideの次のページをご覧ください。
答え2
ユーザーが入力する方法とスクリプトで参照する方法によって異なります。
./command "a b"
または
./command a\ b
提供する必要があります$1="a b"
。別の場所で呼び出す場合は、引数変数を適切な引用符で囲む必要があります。つまり、"$1"
ユーザーが単に入力した場合
./commandab
これにより、$1 には「a」が含まれ、$2 には「b」が含まれ、$#(パラメータ数)は 2 になります。
このスクリプトをcommand
コマンドとして使用してみてください。
#!/bin/bash
echo Number of arguments given - $#
echo First argument - $1
echo second argument - $2