请问这个命令是什么意思 set -- mysqld ?
--什么意思呢
set --
后无内容,将当前 shell 脚本的参数置空,$1
$?
$@
等都为空。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/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 [--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 脚本的参数
6 回答2.6k 阅读
2 回答1.9k 阅读✓ 已解决
1 回答3k 阅读✓ 已解决
2 回答1.9k 阅读✓ 已解决
2 回答1.6k 阅读
4 回答2k 阅读
2 回答1.4k 阅读✓ 已解决
双横杠--在shell中表示选项的结束,后面的都当做参数处理而不是选项,举个例子
echo -- -e hello
和echo -e hello
是不一样的,前者-e
是一个普通参数,后者-e
则是一个选项在你的这个场合下,
set -- mysqld
表示重设脚本的参数为mysqld
,会影响到$argv
变量和$1
,$#
等和参数有关的变量