1. 程式人生 > 其它 >【set】關於 關於shell中 set -- 使用說明

【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
來源:簡書
著作權歸作者所有。商業轉載請聯絡作者獲得授權,非商業轉載請註明出處。