分页: 1 / 1

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

发表于 : 2016-06-19 17:23
sincos2007
如题。

代码: 全选

arrayZ=( one two three four fiveiv ivfive )

echo ${arrayZ[@]//*/$0}

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

发表于 : 2016-06-19 17:57
vickycq
建议详细描述问题

代码: 全选

$ cat test
#!/bin/bash
arrayZ=( one two three four fiveiv ivfive )
echo ${arrayZ[$1]}
$ ./test 1
two
$ ./test 2
three
$ ./test 5
ivfive

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

发表于 : 2016-06-19 22:11
sincos2007

代码: 全选

arrayZ=( one two three four )

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

谢谢

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

发表于 : 2016-06-20 10:54
sincos2007
在我的代码里,$0的值总是我的脚本文件的路径。

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

谢谢

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

发表于 : 2016-06-20 11:39
vickycq
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

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

发表于 : 2016-06-20 12:15
cao627
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的引用。

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

发表于 : 2016-06-20 14:16
susbarbatus

代码: 全选

echo ${arrayZ[@]/#/xx}
用 # 匹配开头,% 匹配结尾

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

发表于 : 2016-06-20 15:16
sincos2007

代码: 全选

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