当我在使用shell脚本时,我对$ @和"$ @"问题感到很沮丧.所以,我编写了一个shell脚本来做一些测试.喜欢以下
func()
{
local a="$@"
for i in "$a"; do
echo "$i ****"
done
}
func000()
{
local a="$@"
for i in $a; do
echo "$i ****"
done
}
func0()
{
local a=$@
for i in "$a"; do
echo "$i ****"
done
}
func00()
{
local a=$@
for i in $a; do
echo "$i ****"
done
}
func1()
{
for i in "$@"; do
echo "$i ****"
done
}
func2()
{
for i in $@; do
echo "$i ****"
done
}
func "a b c"
func a b c
echo "-----------"
func0 "a b c"
func0 a b c
echo "-----------"
func00 "a b c"
func00 a b c
echo "-----------"
func000 "a b c"
func000 a b c
echo "-----------"
func1 "a b c"
func1 a b c
echo "-----------"
func2 "a b c"
func2 a b c
a b c ****
a b c **** func
-----------
a b c **** func0
a b c ****
-----------
a **** func00
b ****
c ****
a ****
b ****
c ****
------------
a **** func000
b ****
c ****
a ****
b ****
c ****
-----------
a b c **** func1 //this has the result that I want.
a ****
b ****
c ****
-----------
a **** func2
b ****
c ****
a ****
b ****
c ****
Run Code Online (Sandbox Code Playgroud)
据我记得,当使用$ @时,我们必须使用双quoate,否则会出现问题.因此,我知道一些功能肯定不能正常工作.(我仍然测试它)
只有func1给了我一个渴望的结果,但是,我想把"$ @"分配给一个变量.通过查看func0,func000,func0,func00结果,这些都没有给我正确的东西.所以,我希望有人可以帮助我.
另外,我知道sh和bash有区别.如果有人能指出我哪些情况会破坏我会很高兴.谢谢.
更新
我应该说,这个脚本的结果,它来到bash或sh的版本,或者freebsd sh vs linux sh.
我可能是错的,如果是的话,请指出来,非常感谢.
在旧的sh,freebsd sh中,我们没有数组,显然,数组赋值无法正常工作,另一种方法是使用我在func000中执行的字符串,本地a ="$ a"; 因为我在$ a; 做......
如果使用linux sh 4.5(已测试)或bash,请参阅下面的答案.
更新,感谢@jordanm,我意识到这是bash和老sh版本之间的区别.
这是bash或sh 4.2的解决方案.在老sh,这可能不起作用.
33 func3()
34 {
35 local a=("${@}")
36
37 for i in "${a[@]}"; do
38 echo "$i ****"
39 done
40 }
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
656 次 |
| 最近记录: |