Bagaimana cara mengubah nilai argumen dalam skrip?

11

Saya mencoba skrip sederhana kecil berikut:

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

Tetapi ketika saya menjalankan ./script foosaya mendapatkan kesalahan dan nilainya tidak berubah:

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

Saya tahu $ 1 adalah argumen pertama yang Anda berikan ke skrip Anda. Tetapi bahkan seperti ini saya ingin mengubah nilainya.

pengguna258266
sumber
terkait: stackoverflow.com/questions/4827690/…
Ciro Santilli 冠状 病毒 审查 六四 六四 事件 法轮功

Jawaban:

10

Anda dapat menggunakan builtin set:

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

Sumber dan lebih lanjut tentang: Mengubah argumen baris perintah - bash .

Radu Rădeanu
sumber
Saya mencoba itu, tetapi masih bergema "foo". Apakah Anda mendapatkan hasil yang berbeda? Pastikan untuk meneruskan "foo" ke skrip.
Marty Fried
@MartyFried Ups, maaf ... Saya baru saja memperbarui jawaban saya.
Radu Rădeanu
Itu bekerja. :-) Jawaban yang bagus ... Saya pikir saya berasumsi dia tidak ingin melakukan itu, dan saya tidak yakin mengapa dia melakukannya, tetapi jawaban Anda sebenarnya lebih benar daripada saran saya untuk tidak melakukannya. Terima kasih untuk tautannya.
Marty Fried
4

Anda tidak dapat mengubah variabel-variabel itu secara langsung. Anda bisa mengatakan:

x=$1
echo $x

Kemudian Anda dapat menggunakan $xsebagai gantinya

Menggunakan $1=barakan segera mengganti parameter pertama untuk $1, dan Anda pada dasarnya menyatakan "foo=bar", dan itu ditafsirkan sebagai perintah "foo", bukan variabel "foo";

Marty Fried
sumber
Ide bagus, tapi tergantung apa yang ingin dicapai OP ... +1 dari saya.
Radu Rădeanu
2

Jangan gunakan gunakan $1untuk ini, di bash, dan shell lain, $1adalah argumen pertama yang Anda sampaikan ke skrip Anda:

#!/bin/bash
echo $1

Jika Anda menjalankan di atas sebagai foo.sh hello, itu akan mencetak hellokarena itu adalah argumen 1. Juga, Anda merujuk ke variabel sebagai vardan untuk variabel ini isinya sebagai $var. Jadi, untuk mendapatkan perilaku yang Anda harapkan, gunakan saja nama lain untuk variabel Anda dan jangan gunakan $:

#!/bin/bash
var="bar"
echo $var
terdon
sumber
Skrip kecil ini hanyalah contoh untuk membuat orang mengerti apa yang saya inginkan. Saya tahu $ 1 adalah argumen pertama yang Anda berikan ke skrip Anda. Tapi, bahkan seperti ini saya ingin mengubah nilainya. Saya perlu menerapkan ini dalam skrip besar lainnya. Terima kasih.
user258266
@ user258266 jangan. Panggil saja skrip besar dengan nilai baru, jangan gunakan $1untuk nilai yang ingin Anda ubah. Bagaimanapun, selama Anda memperbaiki kesalahan sintaks, itu akan berhasil, Anda masalah utama adalah bahwa Anda menggunakan $.
terdon
Tapi saya perlu ... Saya tidak bisa menjelaskan di sini mengapa ... Mungkin saya akan mengedit pertanyaan saya.
user258266
@ user258266 silakan lakukan. Anda mencoba menetapkan variabel sebagai $foo="bar", itu tidak berfungsi, Anda perlu foo="bar"tanpa $.
terdon