sh/bash/dash/ksh/zsh等Shell脚本
-
sincos2007
- 帖子: 32
- 注册时间: 2016-06-19 17:17
- 系统: Ubuntu Kylin 14.04
#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
- 来自: 山东省寿光县
-
联系:
#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
-
sincos2007
- 帖子: 32
- 注册时间: 2016-06-19 17:17
- 系统: Ubuntu Kylin 14.04
#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
#4
帖子
由 sincos2007 » 2016-06-20 10:54
在我的代码里,$0的值总是我的脚本文件的路径。
怎样才能引用*所匹配的元素?
谢谢
-
vickycq
- 帖子: 4507
- 注册时间: 2011-03-20 13:12
- 系统: Debian
- 来自: 山东省寿光县
-
联系:
#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
-
cao627
- 帖子: 992
- 注册时间: 2007-12-05 10:57
- 系统: ubuntu14.04
- 来自: 金山
#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
#7
帖子
由 susbarbatus » 2016-06-20 14:16
代码: 全选
echo ${arrayZ[@]/#/xx}
用 # 匹配开头,% 匹配结尾
沉迷将棋中……
-
sincos2007
- 帖子: 32
- 注册时间: 2016-06-19 17:17
- 系统: Ubuntu Kylin 14.04
#8
帖子
由 sincos2007 » 2016-06-20 15:16
代码: 全选
newstr() {
echo $1
echo -n "!!!"
}
arrayZ=( one two three four )
echo ${arrayZ[@]//*/$(newstr $0)}
}
上面是我下载的教程里的例子,是不是作者喝多了。