常见问题
- 解释下$*和$@ 有什么区别,分别使用在什么场景?
- 如何查找文件夹下所有包含某个字符串的文件?
- shell 中$! 有什么作用?
- var=value和export赋值变量有什么区别?
- 如何调试shell脚本?
- 如何获取当前脚本的绝对路径?
背景
运维过程经常会使用shell获取数据或者做些自动化任务,当然也是面试运维工程师常常被问到的问题,为了方便记忆,我也整理了部份shell常问的知识点。
常见问题
1 解释下$*和$@ 有什么区别,分别使用在什么场景?
1.1 区别
- $*和$@ 在不加双引号的时候作用类似,都可以通过循环遍历出每个参数。
- $*和$@ 在加双引号的时候作用不一样,$*会将传递的参数看成一个整体,循环遍历的时候也是一个整体字符串;$@则会将传递参数通过空格分隔,可以通过循环遍历每个参数。
1.2应用场景
- 当需要传递参数作为一个整体的时候可以使用"$*",如果需要分别获取每个参数的时候使用“$@”
$ cat > test.sh << EOF
#!/bin/bash
echo '没有引用双引号 $*'
for var in $*
do
echo "$var"
done
echo '没有引用双引号 $@'
for var in $@
do
echo "$var"
done
echo '--------------------------'
echo "引用了双引号 \"\$*\""
for var in "$*"
do
echo "$var"
done
echo "引用了双引号 \"\$@\""
for var in "$@"
do
echo "$var"
done
EOF
# 执行一下
$ bash test.sh 1 2 3
没有引用双引号 $*
1
2
3
没有引用双引号 $@
1
2
3
--------------------------
引用了双引号 "$*"