Saya tidak bisa meneruskan string yang dimulai dengan #
argumen baris perintah.
Berikut ini adalah tes sederhana:
#include <stdio.h>
int main(int argc, char *argv[])
{
for (int i = 1; i < argc; i++)
printf("%s ", argv[i]);
putchar('\n');
return 0;
}
Jika saya memasukkan argumen sebagai berikut:
2 4 # 5 6
Nilai argc
is 3
dan not 6
. Bunyinya #
dan berhenti di situ. Saya tidak tahu mengapa, dan saya tidak dapat menemukan jawabannya dalam salinan Bahasa Pemrograman C saya dan C Primer Plus .
c
bash
command-line-arguments
cd-00
sumber
sumber
Jawaban:
#
memulai komentar di shell Unix, seperti//
di C.Ini berarti bahwa ketika shell meneruskan argumen ke progam, ia mengabaikan semua yang mengikuti #. Melarikannya dengan garis miring terbalik atau tanda kutip akan berarti diperlakukan seperti parameter lain dan program harus bekerja seperti yang diharapkan.
atau
atau
Perhatikan bahwa
#
ini adalah karakter komentar hanya pada awal kata, jadi ini juga harus berfungsi:sumber
echo echo Hello, World | bash
. Apakah itu interaktif? Atau mungkinbash <<END
?Ketika melewati nilai melalui argumen baris perintah Anda harus berjalan melalui instruksi berikut ini. Karakter berikut memiliki arti khusus untuk shell itu sendiri dalam beberapa konteks dan mungkin perlu diloloskan dalam argumen:
sumber
2 4 \{#,$,&,*} 5 6
Itu karena Anda menggunakan
sh
shell seperti. Mengutip#
atau menghindarinya menggunakan\
dan itu akan berhasil.Ini disebut komentar di
sh
. Ini menyebabkan#
(spasi-hash) dan argumen setelahnya dibuang. Ini digunakan mirip dengan komentar di C, di mana digunakan untuk mendokumentasikan kode.String yang dimulai dengan
$
disebut variabel dalamsh
. Jika Anda belum menetapkan variabel, itu akan diperluas ke string kosong.Misalnya, semua ini akan menjadi cara yang valid untuk meneruskan
#
ke aplikasi Anda:Dan ini akan menjadi cara yang valid untuk meneruskan string yang dimulai dengan
$
:Harap dicatat bahwa variabel di dalam
"
s masih diperluas.sumber