Printf komutu ile karışıklık?


13

Echo komutunu kullanmadan aşağıdaki üç satırı bir yazdırma komutunda yazdırmak zorundayım. Bu yüzden printf komutunu seçtim. İşte üç satır:

  Different characters can be represented and supported 
  in the print command, for example: 
  x-y, X+Y, –, +, <, >, %, $, #, &.

Şimdiye kadar yaptığım:

   printf "
   Different characters can be represented and supported 
   in the print command, for example: 
   x-y, X+Y, –, +, <, >, %, $, #, &.
   "

Ama üçüncü satır için bash hatası aldım ','.

Herkes beni aydınlatacak mı?


Bu arada, printkomut ile printfkomut arasında bir fark var .
Flimm

Yanıtlar:


12

Kullanımı daha iyi:

printf "Different characters can be represented and supported\n\
in the print command, for example:\n\
x-y, X+Y, –, +, <, >, %%, $, #, &.\n"

Bu hata, diğerlerinin söylediği gibi %, özel ve kaçması gereken karakter nedeniyle alırsınız .

Daha man 1 printffazla bilgi için bakınız .


@Narwen Özel karakterlerle oynamak zorunda kaldığınızda adamı her zaman kullanmanızı öneririm. Adamı aramak için yazın /your_string_to_searchve enter tuşuna basın.
Radu Rădeanu

4
Bütün mesele printfbu %karakter ve ne yaptığı!
Kaz

14

%özel bir karakterdir printf. Hatanın nedeni budur. Olarak kaçmak gerekir %%.

$dış kabuk tarafından çift tırnak içinde olduğunda da ikame edilebilir, bu yüzden ( \$) kaçmak gerekir . Tek tırnak kullanmak genellikle daha kolaydır.


5
Dolar işareti, yalnızca burada geçerli olmayan geçerli bir değişken adı izlediğinde özeldir.
glenn jackman

1
$variableyerine kabuk ile değiştirilir printf. Dizenizi çift tırnak işareti yerine tek tırnak işareti içine $alırsanız, kabuk tarafından enterpolasyon yapılmaz ve doğrudan üzerine aktarılır printf.
Flimm

@glennjackman Geçerli bir değişken adıyla (bu değişkenin gerçekten tanımlanmış olup olmadığına bakılmaksızın) özel olmanın yanı sıra, özel bir parametre sembolüyle veya bir veya daha fazla basamakla izlendiğinde$ de özeldir . Ne söylediğinizin temel fikri doğru. {
Eliah Kagan

9

%printf için özeldir: bu formatın belirteçleri lider karakter olduğunu. Değişmez bir yüzde istiyorsanız,%%


9

echoKomutu kullanma izniniz olmadığında, komutu kullanmayı seçtiğinizde bunu görmek şaşırtıcı olabilir printf.

Neden olmasın cat?

#!/bin/bash

cat<<'EOF'
Different characters can be represented and supported
in the print command, for example:
x-y, X+Y, –, +, <, >, %, $, #, &.
EOF

Fakat soruya göre echo'yu print komutuyla değiştirmek zorunda kaldım. Ama yardımın için teşekkürler.
Narwen

2
$fooMetindeki gibi dizeleri yorumlamaktan kaçınmak için, cat <<'EOF'yerine kullanın cat <<EOF.
Lekensteyn

4

printfilk parametresi olarak bir biçim dizesi alan biçimlendirilmiş bir baskıdır. Parametrelerin geri kalanı biçim dizesinde kullanılır. Kullanırken hatırlamanız gereken üç şey printf:

  1. Birçok dilde printfdeyimler / komutlar / işlevler olsa da, hepsi biraz farklıdır, bu nedenle her zaman dile özgü belgelerdeki ayrıntıları (C, bash, php, perl, vb.) Doğrulayın,

  2. Biçim dizesinde asla kullanıcı tarafından sağlanan bilgileri kullanmamalısınız. Bu her zaman bir güvenlik açığıdır. Kullanıcı tarafından sağlanan bir dizeyi görüntülemek istiyorsanız, aşağıdaki gibi bir biçim dizesi kullanın "%s".

  3. Hem ters eğik çizgi ( \) hem de yüzde işareti ( %), çıktınızda bir kaçış karakteri görünmesini istiyorsanız, başka bir parametreden kaçmalı veya içeri alınmalıdır. Dolar işareti ( $) printf için özel değildir, ancak kabuğa özeldir, bu yüzden tırnaklarınıza dikkat edin.

printfsayıları biçimlendirmek için mükemmeldir. ayrıntılar için man sayfalarına bakın


3

Diğerlerinin de belirttiği gibi, %sembol özeldir printf.

Bir dizeyi olduğu gibi yazdırmak istiyorsanız, printf %silk bağımsız değişken olarak verin ve ikinci bağımsız değişken olarak tek tırnaklarla çevrelenen dize:

printf %s '
Different characters can be represented and supported 
in the printf command, for example: 
x-y, X+Y, –, +, <, >, %, $, #, &.
'

Çift tırnak yerine tek tırnak kullanılması kabuğun gibi sembollerin enterpolasyonunu durdurur $.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.