2018 Dec. 06.
bash上で 'ls -l'という文字列を格納した変数とディレクトリを格納した変数をスペースで区切って次のようにシェルに入力すると"ls -l: コマンドが見つかりません"となる。
一方、変数を引用符で囲ますにシェルに与えると"ls -l"の結果が出力される。
シェルにおける空白の解釈
・クォートで囲まれた文字列内の空白は単なる文字(変数文字列のトークンの一部)
・シェルにとって、引用符に囲まれていない空白は文字ではなく区切り記号
$ 'ls -l' '/'
ls -l: コマンドが見つかりません
$ "ls -l" "/"
ls -l: コマンドが見つかりません
$ s1='ls -l'
$ s2='/'
$ "$s1" "$s2"
ls -l: コマンドが見つかりません
$ s1='ls -l'
$ s2='/'
$ $s1 $s2
(ls -lの結果が出力される)
bash上で 'ls -l'という文字列を格納した変数とディレクトリを格納した変数をスペースで区切って次のようにシェルに入力すると"ls -l: コマンドが見つかりません"となる。
一方、変数を引用符で囲ますにシェルに与えると"ls -l"の結果が出力される。
シェルにおける空白の解釈
・クォートで囲まれた文字列内の空白は単なる文字(変数文字列のトークンの一部)
・シェルにとって、引用符に囲まれていない空白は文字ではなく区切り記号
$ 'ls -l' '/'
ls -l: コマンドが見つかりません
$ "ls -l" "/"
ls -l: コマンドが見つかりません
$ s1='ls -l'
$ s2='/'
$ "$s1" "$s2"
ls -l: コマンドが見つかりません
$ s1='ls -l'
$ s2='/'
$ $s1 $s2
(ls -lの結果が出力される)