Bu soru, düzgün bir şekilde kaçak bir dize değişmezinin nasıl yazılacağı ile ilgili değildir . Bir komut dosyasında veya diğer programlarda doğrudan tüketim için değişkenlerden nasıl kaçacağı ile ilgili olmayan herhangi bir soru bulamadım.
Amacım başka bir komut dosyası oluşturmak için bir komut dosyasını etkinleştirmek. Bunun nedeni, oluşturulan komut dosyalarındaki görevlerin başka bir makinede 0 ila n arasında herhangi bir yerde çalışması ve oluşturuldukları verilerin (tekrar) çalıştırılmadan önce değişebilmesidir, bu nedenle işlemleri bir ağ üzerinden doğrudan yapmak çalışmıyor.
Böyle tek tırnak gibi özel karakterler içerebilir bilinen bir değişkeni göz önüne alındığında, örneğin bir değişken olarak tam çıkışı dize olarak dikkat yazmak gerekir foo
içeren bar'baz
oluşturulan komut dosyası olarak görünmelidir:
qux='bar'\''baz'
"qux=$foo_esc"
diğer senaryo satırlarına eklenerek yazılır . Perl kullanarak böyle yaptım:
foo_esc="'`perl -pe 's/('\'')/\\1\\\\\\1\\1/g' <<<"$foo"`'"
ama bu aşırıya kaçmış gibi görünüyor.
Bunu sadece bash ile yapmayı başaramadım. Bunların birçok varyasyonunu denedim:
foo_esc="'${file//\'/\'\\\'\'}'"
foo_esc="'${file//\'/'\\''}'"
ancak çıktıda fazladan eğik çizgiler görünür (yaptığımda echo "$foo"
) veya sözdizimi hatasına neden olurlar (kabuktan yapıldıysa daha fazla girdi beklenirler).
alias "varname=$varname" varname
orvar=value set
alias
ve / veyaset
oldukça evrensel