каково различие между использованием 'одинарных кавычек' или не в команде находки

Я хотел бы добавить некоторую информацию к предыдущему ответу, так как это покрывает основную поддержку и функциональность, и т.д. (Я также соглашаюсь относительно Nvidia по сравнению с ATI).

Производительность будет не только зависеть от карты, которую Вы выбираете, но также и принимаете ли Вы решение использовать Драйверы с открытым исходным кодом или собственные драйверы Катализатора AMD. Разница между ними огромна (приблизительно половина производительности для драйверов FOSS), но они медленно улучшаются для каждого выпуска.

Phoronix является страницей, которая регулярно публикует сравнительные тесты производительности, и для собственных драйверов и для драйверов FOSS. Сравнительный тест, с которым я связался, является тестом специально для карты, которую Вы упомянули, с помощью драйверов Катализатора. Вот одно выполнение сравнения между что карта ATI и NVidia GTX680

Можно также найти намного больше тестов, специально для драйверов FOSS.

6
25.11.2018, 02:27
4 ответа

Цитаты защищают содержимое от расширения подстановки оболочки. Запустите эту команду (или даже проще всего просто echo * test.txt в каталоге с помощью файла footest.txt , а затем один без каких-либо файлов, которые заканчиваются в test.txt И вы увидите разницу.

$ ls
a  b  c  d  e
$ echo *test.txt
*test.txt
$ touch footest.txt
$ echo *test.txt
footest.txt

Это то же самое произойдет с находом.

$ set -x
$ find . -name *test.txt
+ find . -name footest.txt
./footest.txt
$ find . -name '*test.txt'
+ find . -name '*test.txt'
./footest.txt
$ touch bartest.txt
+ touch bartest.txt
$ find . -name *test.txt
+ find . -name bartest.txt footest.txt
find: paths must precede expression
Usage: find [-H] [-L] [-P] [path...] [expression]
$ find . -name '*test.txt'
+ find . -name '*test.txt'
./bartest.txt
./footest.txt
20
27.01.2020, 20:21
121 --- 58427-

TL; DR версия

Вы передаваете строку буквально в команду / программе, точно так же, как двойные кавычки, но отличаются тем, что односмысленные кавычки предотвращают переменную и Удаление подстановки во время двойного qu ОТЭС расширяют их в строку литерала.

Пример:

$ export MY_VAR=my_string
$ echo "$MY_VAR"
my_string
$ echo '$MY_VAR'
$MY_VAR

То же самое относится к подстановочным ценам

Редактирование:

Пример, как тот, который вы спрашиваете, это IMO невозможно, потому что любой буквальный литерал, что второе командные матчи будет неизбежно сопоставлять подстановочный знак в первом команда.

1
27.01.2020, 20:21

В дополнение к остальным ответам, zsh, fish и (t)csh здесь более полезны, так как они могут помочь вам показать вашу ошибку до того, как она станет проблемой:

Если нет *теста. Файл txt в текущем каталоге:

zsh$ find . -name *test.txt
zsh: no matches found: *test.txt

fish> find . -name *test.txt
fish: No matches for wildcard '*test.txt'.
find . -name *test.txt
             ^

tcsh> find . -name *test.txt
find: No match.

fish и zsh корректно дают понять, что здесь жалуется shell (а не find), в то время как ошибка tcsh вводит в заблуждение. (tcsh сообщает только об ошибке No match, однако, если все глобусы в командной строке не совпадают. Если некоторые из них совпадут, а некоторые нет, то те, которые не совпадают, расширятся на себя, как в Bourne-подобных оболочках).

С помощью bash вы можете получить то же самое поведение с:

$ shopt -s failglob
$ find . -name *test.txt
bash: no match: *test.txt
0
27.01.2020, 20:21

В первом случае аргумент * TEST.TXT Считается оператором команды самой команды , в то время как с кавычками аргумент * test.txt будет считаться параметром на выключатель . .

Если у вас есть более одного текстовых файлов с расширением .txt в текущем каталоге, следующее потерпит неудачу, так как Find не увидит *. TXT Аргумент:

find . -name *.txt

, тогда как Это будет успешно:

find . -name '*.txt'
-3
27.01.2020, 20:21

Теги

Похожие вопросы