怎样用$0引用数组里的元素

sh/bash/dash/ksh/zsh等Shell脚本
回复
sincos2007
帖子: 32
注册时间: 2016-06-19 17:17
系统: Ubuntu Kylin 14.04

怎样用$0引用数组里的元素

#1

帖子 sincos2007 » 2016-06-19 17:23

如题。

代码: 全选

arrayZ=( one two three four fiveiv ivfive )

echo ${arrayZ[@]//*/$0}
头像
vickycq
帖子: 4507
注册时间: 2011-03-20 13:12
系统: Debian
来自: 山东省寿光县
联系:

Re: 怎样用$0引用数组里的元素

#2

帖子 vickycq » 2016-06-19 17:57

建议详细描述问题

代码: 全选

$ cat test
#!/bin/bash
arrayZ=( one two three four fiveiv ivfive )
echo ${arrayZ[$1]}
$ ./test 1
two
$ ./test 2
three
$ ./test 5
ivfive
Debian 中文论坛 - forums.debiancn.org
欢迎所有 Debian GNU/Linux 用户
sincos2007
帖子: 32
注册时间: 2016-06-19 17:17
系统: Ubuntu Kylin 14.04

Re: 怎样用$0引用数组里的元素

#3

帖子 sincos2007 » 2016-06-19 22:11

代码: 全选

arrayZ=( one two three four )

echo ${arrayZ[@]//*/xx$0}
# 希望这行代码输出xxone xxtwo xxthree xxfour

谢谢
sincos2007
帖子: 32
注册时间: 2016-06-19 17:17
系统: Ubuntu Kylin 14.04

Re: 怎样用$0引用数组里的元素

#4

帖子 sincos2007 » 2016-06-20 10:54

在我的代码里,$0的值总是我的脚本文件的路径。

怎样才能引用*所匹配的元素?

谢谢
头像
vickycq
帖子: 4507
注册时间: 2011-03-20 13:12
系统: Debian
来自: 山东省寿光县
联系:

Re: 怎样用$0引用数组里的元素

#5

帖子 vickycq » 2016-06-20 11:39

sincos2007 写了:在我的代码里,$0的值总是我的脚本文件的路径。
可能原因 $0 代表运行脚本的命令本身
从 $1 开始,代表第一个 第二个 第三个 ... 参数
参考 http://www.tldp.org/LDP/abs/html/othertypesv.html
sincos2007 写了:# 希望这行代码输出xxone xxtwo xxthree xxfour

代码: 全选

#!/bin/bash
arrayZ=( one two three four fiveiv ivfive )
echo xx${arrayZ[$1]}

代码: 全选

$ ./test 0
xxone
$ ./test 3
xxfour
$ ./test 5
xxivfive
Debian 中文论坛 - forums.debiancn.org
欢迎所有 Debian GNU/Linux 用户
cao627
帖子: 992
注册时间: 2007-12-05 10:57
系统: ubuntu14.04
来自: 金山

Re: 怎样用$0引用数组里的元素

#6

帖子 cao627 » 2016-06-20 12:15

sincos2007 写了:

代码: 全选

arrayZ=( one two three four )

echo ${arrayZ[@]//*/xx$0}
# 希望这行代码输出xxone xxtwo xxthree xxfour

谢谢
你的意思大概是:
$ echo ${arrayZ[@]}| sed 's/\(two\)/xx\1/g'
one xxtwo three four

但是
${string/*/xx}
如此格式字符替换,只是bash的变量操作特性。并不支持正则表达式的后向引用,即如上 sed命令中的\1对前面括号中的匹配内容two的引用。
头像
susbarbatus
帖子: 2966
注册时间: 2010-04-10 16:14
系统: Arch Linux

Re: 怎样用$0引用数组里的元素

#7

帖子 susbarbatus » 2016-06-20 14:16

代码: 全选

echo ${arrayZ[@]/#/xx}
用 # 匹配开头,% 匹配结尾
沉迷将棋中……
sincos2007
帖子: 32
注册时间: 2016-06-19 17:17
系统: Ubuntu Kylin 14.04

Re: 怎样用$0引用数组里的元素

#8

帖子 sincos2007 » 2016-06-20 15:16

代码: 全选

newstr() {
    echo $1
    echo -n "!!!"
}
arrayZ=( one two three four )
echo ${arrayZ[@]//*/$(newstr $0)}
}
上面是我下载的教程里的例子,是不是作者喝多了。
回复