Bu soru 3 bölümden oluşur ve her yalnız kolaydır, ancak birlikte kombine (en azından benim için) önemsiz değil :) bağımsız değişkenler olarak almalı ne senaryo yazmaya ihtiyacınız Kabuk betiği argümanlarında "-" nasıl kullanılır?
:- biri
Örnekler komutu için başka komuta dosyaların
vb. Ben komut komut için argümanlar nelerdir
- ayırt ihtiyaç nedense senaryom İçinde
- dosyaları
./my_script head -100 -- a.txt b.txt ./xxx/*.txt
./my_script sed -n 's/xxx/aaa/' -- *.txt
Soru1: Daha iyi bir çözüm var mı? ./my_script (ilk denemede) içerisinde
işlem: filenames
spaces
içeren zaman
command="$1";shift
args=`echo $* | sed 's/--.*//'`
filenames=`echo $* | sed 's/.*--//'`
#... some additional processing ...
"$command" "$args" $filenames #execute the command with args and files
Bu çözelti başarısız olur ve/veya '-', ör
/bazı -/yol/daha/salakça dosya name.txt
Soru 2: Düzgün daha sonra yapmak üzere $command
onun $args
ve $filenames
olsun nasıl?
Soru3: - Aşağıdaki yürütme stiline nasıl ulaşılır?
echo $filenames | $command $args #but want one filename = one line (like ls -1)
Güzel kabuk çözümü var mı, yoksa örneğin perl?
:
böyle bir şey olacağını birlikte koyun. 1. neden back-tics kullanmalı?Bunlar, kullanım dışıdır ve Solaris ya da AIX üzerinde çok fazla çalışma yapmayı beklemediğiniz sürece, gerekli değildir. $ (Cmd) kullanın! 2. (sorunuza daha fazla), getopt ve getopts (kabuk için) okuyun. Burada çok sayıda örnek gördüm, en az bir tane ayrıntılı. While gibi bir şeyle birleştiğinde (($ #> 0)) processArgs; vardiya; bitti yardım eder. 3. vaka ifadelerini kullanmayı düşünün. '-' için onlardan kaçmak ya da alıntılamak ya da [-] [-] gibi bir sınıfa dönüştürmek zorunda kalabilirsiniz. – shellter