请问这个命令是什么意思 set -- mysqld ?

请问这个命令是什么意思 set -- mysqld ?

--什么意思呢

阅读 12.5k
2 个回答

双横杠--在shell中表示选项的结束,后面的都当做参数处理而不是选项,举个例子

echo -- -e helloecho -e hello是不一样的,前者-e是一个普通参数,后者-e则是一个选项

在你的这个场合下,set -- mysqld表示重设脚本的参数为mysqld,会影响到$argv变量和$1$#等和参数有关的变量

  1. set -- 后无内容,将当前 shell 脚本的参数置空,$1 $? $@ 等都为空。
  2. set -- 后有内容,当前 shell 脚本的参数被替换为 set -- 后的内容,$1 $? $@ 等相应地被改变。

举例

//文件 tmp.sh

#!/bin/sh
#set -- aa ss dd
echo  $0  #命令行
echo  $1  #第一个参数
echo  $*  #所有参数
echo  $@  #所有参数
echo  $#  #命令行参数个数

执行./tmp.sh qq ww ee的输出

./tmp.sh
qq
qq ww ee
qq ww ee
3

去掉set --前的注释#,执行./tmp.sh qq ww ee的输出

./tmp.sh
aa
aa ss dd
aa ss dd
3

一点线索

mysql 的 DOCKFILE

在看 mysql 的 DOCKFILE 怎么写时,也看到了相同的写法如下:
mysql/5.7/docker-entrypoint.sh

# if command starts with an option, prepend mysqld
if [ "${1:0:1}" = '-' ]; then
    set -- mysqld "$@"
fi

ps: ${1:0:1} =》 ${parameter:offset:length}

set 的 man page

查到 set 的 man page 中有对 -- 有如下介绍

set [--abefhkmnptuvxBCEHPT] [-o option-name] [arg ...]
set [+abefhkmnptuvxBCEHPT] [+o option-name] [arg ...]
    --    If no arguments follow this option, then the positional parameters are unset.  Otherwise, the positional parameters are set to the args, even if some of them begin with a -.

名词解释

另找了 positional parameters 的解释,即:
Positional parameters in a shell script

Positional parameters in a shell script are nothing but the command line arguments passed to a shell script.

它啥也不是,就是指的 shell 脚本的参数
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
宣传栏