Saya mencoba skrip sederhana kecil berikut:
#!/bin/bash
$1="bar"
echo $1
Tetapi ketika saya menjalankan ./script foo
saya 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.
command-line
bash
pengguna258266
sumber
sumber
Jawaban:
Anda dapat menggunakan builtin
set
:Sumber dan lebih lanjut tentang: Mengubah argumen baris perintah - bash .
sumber
Anda tidak dapat mengubah variabel-variabel itu secara langsung. Anda bisa mengatakan:
Kemudian Anda dapat menggunakan
$x
sebagai gantinyaMenggunakan
$1=bar
akan segera mengganti parameter pertama untuk$1
, dan Anda pada dasarnya menyatakan"foo=bar"
, dan itu ditafsirkan sebagai perintah "foo", bukan variabel "foo";sumber
Jangan gunakan gunakan
$1
untuk ini, dibash
, dan shell lain,$1
adalah argumen pertama yang Anda sampaikan ke skrip Anda:Jika Anda menjalankan di atas sebagai
foo.sh hello
, itu akan mencetakhello
karena itu adalah argumen 1. Juga, Anda merujuk ke variabel sebagaivar
dan untuk variabel ini isinya sebagai$var
. Jadi, untuk mendapatkan perilaku yang Anda harapkan, gunakan saja nama lain untuk variabel Anda dan jangan gunakan$
:sumber
$1
untuk nilai yang ingin Anda ubah. Bagaimanapun, selama Anda memperbaiki kesalahan sintaks, itu akan berhasil, Anda masalah utama adalah bahwa Anda menggunakan$
.$foo="bar"
, itu tidak berfungsi, Anda perlufoo="bar"
tanpa$
.