Solusi 1:
Pendekatan asli Anda akan bekerja dengan baik jika Anda lolos dari hash :
$ [[ '#snort' == \#* ]]; echo $?
0
Pendekatan lain akan memotong karakter pertama dari konten variabel, menggunakan "Ekspansi Substring":
if [[ ${x:0:1} == '#' ]]
then
echo 'yep'
else
echo 'nope'
fi
yep
Dari halaman manual Bash:
${parameter:offset}
${parameter:offset:length}
Substring Expansion. Expands to up to length characters of
parameter starting at the character specified by offset. If
length is omitted, expands to the substring of parameter start-
ing at the character specified by offset. length and offset are
arithmetic expressions (see ARITHMETIC EVALUATION below).
length must evaluate to a number greater than or equal to zero.
If offset evaluates to a number less than zero, the value is
used as an offset from the end of the value of parameter. If
parameter is @, the result is length positional parameters
beginning at offset. If parameter is an array name indexed by @
or *, the result is the length members of the array beginning
with ${parameter[offset]}. A negative offset is taken relative
to one greater than the maximum index of the specified array.
Note that a negative offset must be separated from the colon by
at least one space to avoid being confused with the :- expan-
sion. Substring indexing is zero-based unless the positional
parameters are used, in which case the indexing starts at 1.
Solusi 2:
Versi yang kompatibel dengan POSIX:
[ "${var%${var#?}}"x = '#x' ] && echo yes
atau:
[ "${var#\#}"x != "${var}x" ] && echo yes
atau:
case "$var" in
\#*) echo yes ;;
*) echo no ;;
esac
Solusi 3:
Saya tahu ini mungkin bid'ah, tetapi untuk hal semacam ini saya lebih suka menggunakan grep atau egrep daripada melakukannya dari dalam shell. Ini sedikit lebih mahal (saya kira) tetapi bagi saya keterbacaan solusi ini mengimbangi itu. Ini masalah selera pribadi, tentu saja.
Jadi:
myvar=" #comment asfasfasdf"
if ! echo $myvar | egrep -q '^ *#'
then
echo "not a comment"
else
echo "commented out"
fi
Ia bekerja dengan atau tanpa spasi awal. Jika Anda juga ingin memperhitungkan tab awal, gunakan egrep -q '^[ \t]*#' sebagai gantinya.
Bagaimana saya bisa membunuh semua pekerjaan yang dihentikan?
Penerusan IP =kapan dan mengapa ini diperlukan?