Quoting, belirli karakterlerin veya sözcüklerin özel anlamlarını kaldırmak için kullanılır. Rezerve edilmiş özel sözcüklerin belirlendikleri gibi çalışmasının önüne geçer. Bash’de üç çeşit quoting mekanizması vardır: Single Quote, Double Quote ve Backslash.
Aslında bu yazıyı yazarken, amacım single quote ve double quote karşılaştırması yapmaktı. Sonra, hazır yeri gelmişken backslash’dan da bahsedelim, dedim. Kendisini hemen aradan çıkarıp asıl konuya geçiyorum.
Backslash
Klasik. Escape Character. Exact words from gnu.org:
A non-quoted backslash ‘\’ is the Bash escape character. It preserves the literal value of the next character that follows, with the exception of newline. If a \newline pair appears, and the backslash itself is not quoted, the \newline is treated as a line continuation (that is, it is removed from the input stream and effectively ignored).
Single Quotes vs Double Quotes
Aşağıdaki örnek aslında ikisi arasındaki temel farkı anlatıyor. Double quote içerisinde dolar, grave accent, backslash gibi karakterler özellklerini korurlar. Single quote ise içeriği olduğu gibi yazar, tüm özel karakterler özelliğini yitirir.
echo "$(echo "hello there")"
> hello there
echo '$(echo "hello there")'
> (echo "hello there")
Single Quotes: Enclosing characters in single quotes (‘'’) preserves the literal value of each character within the quotes. A single quote may not occur between single quotes, even when preceded by a backslash.
Double Quotes: Enclosing characters in double quotes (‘"’) preserves the literal value of all characters within the quotes, with the exception of ‘$’, ‘`’, ‘\’.
The backslash retains its special meaning only when followed by one of the following characters: ‘$’, ‘`’, ‘"’, ‘\’, or newline. Within double quotes, backslashes that are followed by one of these characters are removed. Backslashes preceding characters without a special meaning are left unmodified. A double quote may be quoted within double quotes by preceding it with a backslash.