Shell'de 10'dan fazla parametre nasıl kullanılır?


103

Linux üzerinde bash kabuğu kullanıyorum ve kabuk betiğinde 10'dan fazla parametre kullanmak istiyorum


8
10 parametreye sahip olmanın onu oldukça kafa karıştırıcı hale getireceğini unutmayın. Bunun yerine seçenekleri (örneğin -a 1veya --foo=bar) kullanmak daha iyi olabilir . Bakın man getopt, man getoptsve man bashbunu yapmak için bazı seçenekler için.
Mikel

Yanıtlar:


160

Bunları ayarlamak için küme parantezi kullanın:

echo "${10}"

Ayrıca, aşağıdaki gibi konumsal parametreler üzerinde yineleme yapabilirsiniz:

for arg

veya

for arg in "$@"

veya

while (( $# > 0 ))    # or [ $# -gt 0 ]
do
    echo "$1"
    shift
done

2
$ {10} 'ın bash içinde çalışacağını unutmayın, ancak birçok sh uygulaması yalnızca tek haneli özelliklere izin verdiğinden taşınabilirliğinizi sınırlayacaktır.
William Pursell

1
@William: Orijinal eski Bourne kabuğu gibi kabul etmeyen bazı mermiler var, ancak başka bir yorumda (Bash, dash, ksh ve zsh) listelediğim kabuklara ek olarak, csh, tcsh'da da çalışıyor ve Busybox külü.
sonraki duyuruya kadar duraklatıldı.

1
@WilliamPursell ${10}, POSIX tarafından
Steven Penny

2
${10}Çalışma konusunda endişelenmek , yalnızca standartlara uygun olmayan çok eski uygulamaları kullanırken gereklidir. Muhtemelen sadece tarihsel açıdan ilgi çekicidir ... ve henüz onu kullanmadım! Sanırım, en iyi uygulama 10 argümanın tekrar edilmedikçe çok fazla olduğunu dikte ediyor, bu durumda onları "$@"numaralandırmak yerine onlarla yineleyeceksiniz .
William Pursell

23

Aşağıdakilerle 0 ile 255 arasında en fazla 256 parametreye sahip olabilirsiniz:

${255}

5
Sınırın kabuğa bağlı olduğunu düşünüyorum. Bash, dash, ksh ve zsh buna sahip görünmüyor. sh -c 'echo ${333}' /usr/bin/*
sonraki duyuruya kadar duraklatıldı.

3
Kabuğum rahatça 2 milyona çıkıyorset $(seq 2097152); echo ${2097152}
Steven Penny
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.