来自 操作系统 2019-12-08 10:44 的文章
当前位置: 网上澳门金莎娱乐 > 操作系统 > 正文

浅谈$* 和$@的区别

Receive 4 parameters
Using $*

==>1<==
==>2<==
==>3<==
==>a<==
==>b<==
==>c<==

Using "$*"
==>1^2^3^a b c<==

Using $@
==>1<==
==>2<==
==>3<==
==>a<==
==>b<==
==>c<==

Using "$@"
==>1<==
==>2<==
==>3<==
==>a b c<==

**2、[] 中括号:

#!/bin/sh
foo(){
 echo $*

}
bar(){
 echo $@
}
foo 1 2 3 4 
bar 1 2 3 4 

执行输出:

**eg: $ :
$ echo $?
$ 0
while: (该语句结构可实现一个无限循环)

#!/bin/sh
join(){
   IFS=$1
   shift
   echo "$*" | bc
   }   
join $*

12、 倒斜线:放在指令前,有取消 aliases(别名) 的作用;放在特殊符号前,则该特殊符号的作用消失;放在指令的最末端,表示指令连接下一行(使得回车符无效,只起换行作用)

我们再看一组代码:

在编写Shell脚本时,我们需要会用到各种各样的特殊符号,通过这些特殊符号可以使我们编写的代码更加简洁和高效,这里给大家汇总下:

  • 当$*和$@没有被引用的时候,它们确实没有什么区别,都会把位置参数当成一个个体。(我们最好不要使用,因为如果位置参数中带有空格或者通配符的情况下,可能结果会和我们想要的不一样)
  • "$*"     会把所有位置参数当成一个整体(或者说当成一个单词),如果没有位置参数,则"$*"为空,如果有两个位置参数并且IFS为空格时,"$*"相当于"$1 $2"
  • "$@"  会把所有位置参数当成一个单独的字段,如果没有位置参数($#为0),则"$@"展开为空(不是空字符串,而是空列表),如果存在一个位置参数,则"$@"相当于"$1",如果有两个参数,则"$@"相当于"$1"  "$2"等等

4、'string' 单引号 和 “string” 双引号
双引号:如果想在定义的变量中加入空格,就必须使用单引号或双引号,
单、双引号的区别在于双引号转义特殊字符而单引号不转义特殊字符
eg: $ heyyou=home
$ echo ‘$heyyou'
$ $heyyou ($没有转义)
eg: $ heyyou=home
$ echo “$heyyou”
$ home (很明显,$转义了输出了heyyou变量的值)

1 2 3 4
1 2 3 4

**6、$((…))语法:对括号内的表达式求值

$*使用举例:

eg: #!/bin/sh
for file in $(ls f*.sh);do
lpr $file
done
exit 0

 

这篇文章主要介绍了shell脚本中常见的一些特殊符号和它的作用详解,总结的很简洁,容易看懂,需要的朋友可以参考下

执行输出:

8、命令列表:
AND列表 statement1 && statement2 && statement3 && …:只有在前面所有的命令都执行成功的情况下才执行后一条命令
OR列表 statement1 || statement2 || statement3 || …:允许执行一系列命令直到有一条命令成功为止,其后所有命令将不再被执行
eg:#!/bin/sh
touch file_网上澳门金莎娱乐,one
rm -f file_two
if [ -f file_one ] && echo “hello” && [ -f file_two ] && echo ” there”
then
echo “in if”
else
echo “in else”
fi
exit 0
上例的输出为:
hello
in else
关于AND列表与OR列表,在逻辑判断中很使用,下面就举一个其最常用的例子:
[ condition ] && command for true || command for false:
当条件为真时,执行commandfor true ,当条件为假时,执行command for false

 

用法一:通配符扩展:
*允许匹配方括号中任何一个单个字符
eg: ls /[eh][to][cm]

相当于执行 ls /etc /home(若有/eom目录,就相当于会执行ls /etc /home /eom)
注:在mkdir命令下不能扩展

 

eg:let “sus=2**3″
echo “sus = $sus”
$ sus = 8 -

通过上面的代码我们可以看出:

**eg:
#!/bin/sh
x=0
hile [ "$x" -ne 10 ];do
echo $x
x=$(($x+1))
done
exit 0

[root@localhost ~]# sh join.sh + 1 2 3 4
10

用法二:用于条件判断符号: []符号可理解为指向test命令的一个软链接,所以其用法可完全参照test,将test位置替换为[便可。
eg: if [ "$?" != 0 ] 等价于 if test “$?” != 0
then echo “Executes error”

输出没有任何区别,那么$*和$@的区别在哪里?

**1、{} 大括号:

先看一下下面的代码:

**用法三:参数扩展

本文由网上澳门金莎娱乐发布于操作系统,转载请注明出处:浅谈$* 和$@的区别

关键词: