Почему двойная кавычка меняет результат - PullRequest
1 голос
/ 03 ноября 2008

У меня есть простой скрипт Linux:

#!/bin/sh
for i in `ls $1`
do
       echo $i
done

В моей временной папке находятся 4 файла: a.a, a.aa, a.ab и a.ac

Когда я звоню ./script temp / *. ?? я получаю:

temp/a.aa

Когда я звоню ./script "temp / *. ??" я получаю:

temp/a.aa
temp/a.ab
temp/a.ac

Почему двойная кавычка меняет результат?

Ответы [ 2 ]

7 голосов
/ 03 ноября 2008

В первом случае оболочка расширяется temp/*.?? до:

temp/a.aa temp/a.ab temp/a.ac

Поскольку вы смотрите только на первый параметр в вашем скрипте, только temp/a.aa передается в ls.

Во втором случае оболочка не выполняет никакого раскрытия из-за кавычек, и сценарий получает единственный аргумент temp/*.??, который раскрывается в вызове до ls.

1 голос
/ 03 ноября 2008

Потому что без кавычек оболочка расширяет ваш вызов до:

./script temp/a.aa temp/a.ab temp/a.ac

То есть $1 равно temp/a.aa вместо temp/*.??.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...