LINUX.ORG.RU

Есть ли разница между двойными кавычками и двумя одинарными ?


0

1

Собственно $сабж.
Если я 2 раза напечатаю одинарную кавычку (' ' без пробела естественно) это будет равносильно двойным кавычкам (") ?
Вопрос появился при прочтении одной старой книги по Unix.

★★★★★

Если я 2 раза напечатаю одинарную ковычку (' ' без пробела естественно) это будет равносильно двойным ковычкам (") ?

Нет.

AITap ★★★★★ ()

Нет, ' ' без пробела естественно - описывает что внутри у тебя ничего нет, пустая строка например.

bhfq ★★★★★ ()

Разница очень существенна. И если ты напечатаешь две одинарные рядом, ты не получишь двойную.

minakov ★★★★★ ()
Ответ на: комментарий от AITap

Я конечно не программист, но вот потестил.
Объясните если не трудно.

[root@localhost test]# cat ga.sh
#!/bin/bash
b=3
echo "$b"
[root@localhost test]# cat gb.sh
#!/bin/bash
b=3
echo '$b'
[root@localhost test]# cat gf.sh
#!/bin/bash
b=3
echo ''$b''
[root@localhost test]# ./ga.sh
3
[root@localhost test]# ./gb.sh
$b
[root@localhost test]# ./gf.sh
3

dada ★★★★★ ()
Ответ на: комментарий от AITap

вывод 1-го и 3-го скрипта идентичны.
это не служит доказателбством что двойные_ковычки = двум_одинарным ?

dada ★★★★★ ()
Ответ на: комментарий от dada

А чего ты ожидал? В третьем случае у тебя конкатенация 3 строк: пустая;$b;пустая;

Вполне логично что это разультат подстановки $b.

Это все равно как если бы ты утверждал, что 0 это отсутсвие числа, а в результате доказательства приводил бы следующее: 3=3 и 0+3=3. Но ведь есть еще операция умножения ;)

Suntechnic ★★★★★ ()
Ответ на: комментарий от dada
alex@alex-laptop:~$ echo test > "/home/alex/Рабочий стол/test.txt"
alex@alex-laptop:~$ cat "/home/alex/Рабочий стол/test.txt"
test
alex@alex-laptop:~$ cat ''/home/alex/Рабочий стол/test.txt''
cat: /home/alex/Рабочий: Нет такого файла или каталога
cat: стол/test.txt: Нет такого файла или каталога
Suntechnic ★★★★★ ()
Ответ на: комментарий от Suntechnic

В третьем случае у тебя конкатенация 3 строк: пустая;$b;пустая;

Я дико туплю наверное, но ведь второй скрипт не так говорит.
При твоём раскладе третий скрипт должен был вывести не 3 а $b.

dada ★★★★★ ()
:~:
ok> cat "hello world"
cat: hello world: Нет такого файла или каталога
:~:
ok> cat ''hello world''
cat: hello: Нет такого файла или каталога
cat: world: Нет такого файла или каталога
:~:
ok> 

так сойдёт?

nanoolinux ★★★★ ()
Ответ на: комментарий от dada

попробуйте еще один скрипт, где

echo $b

думаю, все станет ясно

MyTrooName ★★★★★ ()
Ответ на: комментарий от nanoolinux

Кроме того из man bash:

There are three quoting mechanisms: the escape character, single quotes, and double quotes.

Ничего про одинарные два раза не сказано.

nanoolinux ★★★★ ()
Ответ на: комментарий от dada

Во вотором скрипте у тебя строка заключена в '. Т.е. экранирована от подстановки.

Давай посмотрим посимвольно...

2:

' - открыта одинарная кавычка, экранирующая подстановку
$ - символ строки
b - символ строки
' - закрыта одинарная кавычка, экранирующая подстановку
Результата - строка из двух символов - $b

3:

' - открыта одинарная кавычка, экранирующая подстановку
' - закрыта одинарная кавычка,
$ - символ начала имени переменной
b - символ имени переменной
' - открыта одинарная кавычка
' - закрыта одинарная кавычка
Результата - строка - результат подстановки значения переменной b и конкатенации её с двумя пустыми строками.

Suntechnic ★★★★★ ()

две одинарные кавычки - это два байта, одна двойная - один байт

DELIRIUM ☆☆☆☆☆ ()

Писец тут девелопмент. " - это два символа, " - это один, и коды у них разные

Zorn ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.