Bir koddaki bir argümanın değeri nasıl değiştirilir?


11

Aşağıdaki küçük basit komut dosyasını denedim:

#!/bin/bash
$1="bar"
echo $1

Ama çalıştırdığımda ./script foohata alıyorum ve değer değişmedi:

/home/mika/script: line 2: foo=bar: command not found
foo

Senaryonun ilk argümanı $ 1 biliyorum. Ama bu şekilde bile değerini değiştirmek istiyorum.


Yanıtlar:


10

Yerleşik kullanabilirsiniz set:

#!/bin/bash
set -- "bar"
echo $1

Kaynak ve daha fazlası: Komut satırı bağımsız değişkenini değiştirme - bash .


Bunu denedim, ama yine de "foo" yankılanıyordu. Farklı sonuçlar aldınız mı? Komut dosyasına "foo" ilettiğinizden emin olun.
Marty Fried

@MartyFried Ups, üzgünüm ... Cevabımı güncelledim.
Radu Rădeanu

Bu çalışır. :-) İyi cevap ... Sanırım bunu yapmak istemediğini sanıyordum ve neden yapacağından emin değilim, ama cevabınız aslında bunu yapmama önerimden daha doğru. Bağlantı için teşekkürler.
Marty Fried

4

Bu değişkenleri doğrudan değiştiremezsiniz. Söyleyebilirdin:

x=$1
echo $x

Sonra $xbunun yerine kullanabilirsiniz

Kullanmak $1=bar, ilk parametrenin yerini hemen alacaktır $1ve esas "foo=bar"olarak belirtiyorsunuz ve değişken "foo" değil, "foo" komutu olarak yorumlanıyor;


Güzel fikir, ama OP'nin tam olarak neyi başarmasını istediğine bağlı ... +1 benden.
Radu Rădeanu

2

Bunun $1için, içinde bashve diğer kabuklarda kullanımı kullanmayın $1, betiğinize ilettiğiniz ilk argüman:

#!/bin/bash
echo $1

Yukarıdaki gibi çalıştırırsanız foo.sh hello, bu helloilk argüman olduğu için yazdırılacaktır . Ayrıca, bir değişkeni varve bir değişkenin içeriğini de belirtirsiniz$var . Bu nedenle, beklediğiniz davranışı elde etmek için değişkeniniz için başka bir ad kullanın ve a kullanmayın $:

#!/bin/bash
var="bar"
echo $var

Bu küçük senaryo, insanların istediğimi anlamasını sağlamak için sadece bir örnekti. Senaryonun ilk argümanı $ 1 biliyorum. Ama bu şekilde bile değerini değiştirmek istiyorum. Bunu başka bir büyük senaryoda uygulamam gerekiyor. Teşekkür ederim.
user258266

@ user258266 yapma. Büyük betiği yeni değerle çağırmanız yeterlidir, $1değiştirmek istediğiniz değerler için kullanmayın . Her neyse, sözdizimi hatasını düzelttiğiniz sürece çalışmalı, asıl sorun $.
terdon

Ama ihtiyacım var ... Burada nedenini açıklayamıyorum ... Belki sorumu düzenlerim.
user258266

@ user258266 lütfen yapın. Değişken olarak $foo="bar"ihtiyacınız foo="bar"olmayan bir değişken ayarlamaya çalışıyorsunuz $.
terdon
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.