মাইএসকিউএল প্রক্রিয়া চালু করার জন্য আমার কাছে নিম্নলিখিত স্ক্রিপ্ট রয়েছে:
if [ "${1:0:1}" = '-' ]; then
set -- mysqld_safe "$@"
fi
if [ "$1" = 'mysqld_safe' ]; then
DATADIR="/var/lib/mysql"
...
এই প্রসঙ্গে 1: 0: 1 এর অর্থ কী?
মাইএসকিউএল প্রক্রিয়া চালু করার জন্য আমার কাছে নিম্নলিখিত স্ক্রিপ্ট রয়েছে:
if [ "${1:0:1}" = '-' ]; then
set -- mysqld_safe "$@"
fi
if [ "$1" = 'mysqld_safe' ]; then
DATADIR="/var/lib/mysql"
...
এই প্রসঙ্গে 1: 0: 1 এর অর্থ কী?
উত্তর:
-
স্পষ্টতই, এটি কোনও ড্যাশড আর্গুমেন্ট বিকল্পের জন্য একটি পরীক্ষা । সত্যিই কিছুটা অদ্ভুত। এটি bash
থেকে প্রথম এবং একমাত্র প্রথম চরিত্রটি বের করার প্রয়াসে এটি একটি মানহীন সম্প্রসারণ ব্যবহার করে $1
। 0
মাথা চরিত্র সূচক এবং 1
স্ট্রিং দৈর্ঘ্য হয়। একটি [
test
মত এটি হতে পারে:
[ " -${1#?}" = " $1" ]
উভয়ই তুলনা বিশেষভাবে উপযুক্ত test
নয়, কারণ এটি -
ড্যাশযুক্ত যুক্তিগুলিরও ব্যাখ্যা করে - এজন্য আমি সেখানে শীর্ষস্থান ব্যবহার করি space
এই ধরণের জিনিস করার সর্বোত্তম উপায় - এবং এটি সাধারণত যেভাবে করা হয় তা হ'ল:
case $1 in -*) mysqld_safe "$@"; esac
${1:0:1}
একটি দৈর্ঘ্য, কোনও সূচক নয়।
[[
: [[ $1 == -* ]]
।
-
সমস্যা হয়ে উঠবে test
.. পসিএক্স আর্গুমেন্ট গণনা দ্বারা অর্থগুলির সংজ্ঞা দেয়। যেহেতু দুটি বিকল্প যুক্তিযুক্ত এমন কোনও বিকল্প নেই, তাই এটি কাঁচা লেখা নিরাপদ হওয়া উচিত।
[[ : [[
?
[[
হ'ল কেবল বাক্য গঠন এবং নামটি কেবল একটি বিরামচিহ্ন just
এটি $1
0 থেকে 1 ম চরিত্রের একটি স্ট্রিং নিতে চলেছে । সুতরাং আপনি প্রথম অক্ষর এবং স্ট্রিংয়ের প্রথম অক্ষর পেতে চলেছেন।
থেকে bash
3.2 মানুষ পৃষ্ঠা:
${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.
এটি পরীক্ষা করছে যে প্রথম যুক্তির প্রথম চরিত্রটি $1
একটি ড্যাশ -
।
1: 0: 1 পরামিতি বিস্তৃতির জন্য মান হল: ${parameter:offset:length}
।
এর মানে:
1
, অর্থাত:$1
0
থেকে (0 থেকে সংখ্যায়িত)।সংক্ষেপে: প্রথম অবস্থানগত পরামিতির প্রথম অক্ষর $1
।
সেই প্যারামিটার সম্প্রসারণটি ksh, bash, zsh (কমপক্ষে) এ উপলব্ধ।
আপনি যদি পরীক্ষার লাইনটি পরিবর্তন করতে চান:
[ "${1:0:1}" = "-" ]
অন্যান্য নিরাপদ বাশ সমাধানগুলি হ'ল:
[[ $1 =~ ^- ]]
[[ $1 == -* ]]
নিরাপদ কারণ এর উদ্ধৃতিতে কোনও সমস্যা নেই (ভিতরে কোনও বিভাজন কার্যকর করা হবে না [[
)
পুরানো, কম সক্ষম শেলগুলিতে, এতে পরিবর্তন করা যেতে পারে:
[ "$(echo $1 | cut -c 1)" = "-" ]
[ "${1%%"${1#?}"}" = "-" ]
case $1 in -*) set -- mysqld_safe "$@";; esac
শুধুমাত্র কেস কমান্ড ভুল উদ্ধৃতি প্রতিরোধী।