【set】關於 關於shell中 set -- 使用說明
MySQL 官方的Dockerfile中有如下關於set的一段程式碼:
用於判斷該指令碼後面的引數是否以“-”開始,它考慮的是啟動mysqld是帶引數的情況,如果有的話,就將mysqld和引數作為變數存到$@中。
關於set --,Manual文件的說明如下:
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 -.
我們構造一個測試指令碼測試一下:
# cat test.sh
####################
#!/bin/bash
if [ "${1:0:1}" = '-' ]; then
set -- mysqld "$@"
fi
echo '$@: '"$@"
echo '$1: '"$1"
########################
關於$@與$*的區別,$@指每個位置引數引數都是一個獨立的""引用字串,這就意味著引數被完整地傳遞,而$*則指所有位置引數只被一個""引用,相當於一個引數。
參考
set命令
https://man.linuxde.net/set
Bash 指令碼 set 命令教程
http://www.ruanyifeng.com/blog/2017/11/bash-set.html
What's “set — ”$progname“ ”$@“” means in shell script?
https://stackoverflow.com/questions/20088290/whats-set-progname-means-in-shell-script
分析Mysql 5.6的Dockerfile
https://www.cnblogs.com/ivictor/p/4832832.html
作者:Bogon
連結:https://www.jianshu.com/p/7bac1ec4ddab
來源:簡書
著作權歸作者所有。商業轉載請聯絡作者獲得授權,非商業轉載請註明出處。