入力変数にスペースがありますか? [コピー]

入力変数にスペースがありますか? [コピー]

以下を含むスクリプトがあるとしましょう。

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

関連情報