Saya memiliki skrip ini bernama test.sh:
#!/bin/bash
STR = "Hello World"
echo $STR
ketika saya berlari sh test.sh
saya mendapatkan ini:
test.sh: line 2: STR: command not found
Apa yang saya lakukan salah? Saya melihat tutorial bash scripting yang sangat dasar / pemula secara online dan ini adalah bagaimana mereka mengatakan untuk mendeklarasikan variabel ... Jadi saya tidak yakin apa yang saya lakukan salah.
Saya di Ubuntu Server 9.10. Dan ya, bash terletak di /bin/bash
.
#!/usr/bin/env bash
daripada meletakkan langsung#!/bin/bash
kecuali Anda benar-benar yakin Andabash
ada di/bin
karena jawaban ini: stackoverflow.com/a/21613044/3589567Jawaban:
Anda tidak dapat memiliki spasi di sekitar tanda '=' Anda.
Ketika Anda menulis:
bash mencoba menjalankan perintah bernama STR dengan 2 argumen (string '=' dan 'foo')
Ketika Anda menulis:
bash mencoba menjalankan perintah bernama STR dengan 1 argumen (string '= foo')
Ketika Anda menulis:
bash mencoba menjalankan perintah foo dengan STR diatur ke string kosong di lingkungannya.
Saya tidak yakin apakah ini membantu untuk mengklarifikasi atau jika itu hanya kebingungan, tetapi perhatikan bahwa:
STR "=" "foo"
,STR "=foo"
,STR="" foo
.Bagian yang relevan dari spesifikasi bahasa sh, bagian 2.9.1 menyatakan:
Dalam konteks itu, a
word
adalah perintah yang akan dijalankan oleh bash. Setiap string yang berisi=
(dalam posisi apa pun selain di awal string) yang bukan merupakan pengalihan variabel adalah penugasan variabel, sedangkan string yang bukan pengalihan dan tidak mengandung=
adalah perintah. InSTR = "foo"
,STR
bukan tugas variabel.sumber
FOO-BAR=qux
itu bukan tugas variabel karenaFOO-BAR
bukan nama yang valid.Jatuhkan spasi di sekitar
=
tanda:sumber
set foo = bar
kesalahan umum dalam file batch Windows juga — dan di sana bahasa batch diejek untuk itu ;-)Dalam mode interaktif semuanya terlihat baik-baik saja:
Jelas (!) Seperti kata Yohanes, tidak ada ruang di sekitar
=
. Jika ada ruang di sekitar=
maka dalam mode interaktif itu memberikan kesalahan sebagaisumber
STR = "Hello World"
, jadi jawaban ini tidak berlaku di sini.$
tandaSaya tahu ini telah dijawab dengan jawaban yang sangat berkualitas tinggi. Tapi, singkatnya, Anda tidak punya ruang.
Tidak berfungsi karena spasi di sekitar tanda sama dengan. Jika Anda menjalankan ...
Itu akan berhasil
sumber
Ketika Anda mendefinisikan variabel apa pun maka Anda tidak perlu memasukkan spasi tambahan.
Misalnya
Jadi hapus spasi:
dan itu akan bekerja dengan baik.
sumber