İlk 9 argümanı $ 1-9 $ arasında gösteriliyorsa, $ 10, $ 1 ve onu 0 olarak yorumlanır. Bunu nasıl açıklarım ve 10'dan büyük işlevlere argümanlara erişirim?9'dan fazla argüman varsa, işlevlere argümanlara nasıl erişebilirim?
Teşekkürler.
İlk 9 argümanı $ 1-9 $ arasında gösteriliyorsa, $ 10, $ 1 ve onu 0 olarak yorumlanır. Bunu nasıl açıklarım ve 10'dan büyük işlevlere argümanlara erişirim?9'dan fazla argüman varsa, işlevlere argümanlara nasıl erişebilirim?
Teşekkürler.
Kullanım: Sonra
#!/bin/bash
echo $10
echo ${10}
:
#!/bin/bash
echo ${10}
foo.sh içinde 10 $, kod ile farkı test etmek için
$ ./foo.sh first 2 3 4 5 6 7 8 9 10
first0
10
aynı şey varsa doğrudur :
foobar=42
foo=FOO
echo $foobar # echoes 42
echo ${foo}bar # echoes FOObar
kullanılması Eğer belirsizlikler kaldırmak istediğiniz {}
... Genelde
my2c
olarak düşünürüm, 'bash' _you'_ 'nu kullandığını bilmiyorum ama' $ 'açgözlü:' $ foobar' size 42, _not_ verecek filanca. Eğer 'foo' kelimesini ve ardından "bar" sözcüğünü istiyorsanız, "$ {foo} bar" 'a ihtiyacınız var demektir. Cevabınızın "gerçek" kısmının doğru olmasından dolayı sizi reddetmeyeceğim, ancak rahatsız edici bit'i düzeltmek (veya kaldırmak) isteyebilirsiniz. – paxdiablo
@paxdiablo: evet, denenmemiş (utanç) bir örnek oldu ... Teşekkür ederim. – neuro
Bu daha iyi, bu yüzden +1. Değişken adı ve değeri aynı olan karışıklık olasılığından dolayı 'foo'' FOO'ya ayarlama özgürlüğünü aldım. Umarım sakıncası yoktur. Şerefe. – paxdiablo
Bash kodu yorumlama zaman belirli bir dizeye tüm değişken adı için kullanıldığını güvenli olması için, sen
Bash kullanıyorsanız, ${10}
'u kullanabilirsiniz.
$ {...} sözdizimi bu özel durumda POSIX uyumlu gibi görünüyor, ama böyle komutunu shift
kullanılması tercih olabilir:
while [ "$*" != "" ]; do echo "Arg: $1" shift done
EDIT: Ben yapmadım fark shift
'un ne yaptığını açıklayın. Sadece betiğin (veya fonksiyonun) argümanlarını değiştirir. Örnek:
while getopts a:bc OPT; do case "$OPT" in 'a') ADD=1 ADD_OPT="$OPTARG" ;; 'b') BULK=1 ;; 'c') CHECK=1 ;; esac done shift $(expr $OPTIND - 1) FILE="$1"
Muhtemelen '$ * -ne 0' yerine' '$ * '' istiyoruz! =" " –
Bazı durumlarda' while' ve 'shift' kullanmaya gerek yoktur. “$ @” 'De arg için' arg' veya 'için kullanabilirsiniz. –
Bu çalışmayan bir örnek senaryosunu sonrası olabilir: o yardımcı olabilir durumunda
, burada getopt/vardiya ile bir örnektir? Bence 10 dolar sadece çalışmalı ve 10'uncu argümana dahil olmalı ... – sloth
@dkson: no. '{}' Kullanmıyorsanız, $ 10'u 1 $ ve litteral 0 – neuro