这是我的情况.目前,我有一个接受两个参数的脚本:书名和章名.例如:
$ myscript book1 chap1
Run Code Online (Sandbox Code Playgroud)
现在,由于需要很长时间才能解释的原因,我希望我的脚本能够采用以下格式的单个参数:{book name}.{chapter name}.例如:
$ myscript book1.chap1
Run Code Online (Sandbox Code Playgroud)
我遇到的困难是我不知道如何取一个字符串$ 1 = abc.xyz并将其变成两个单独的变量,$ var1 = abc和$ var2 = xyz.我怎样才能做到这一点?
smo*_*ing 14
如果它只是两个标签,您可以使用bash表达式
arg=$1
beforedot=${arg%.*}
afterdot=${arg#*.}
Run Code Online (Sandbox Code Playgroud)
它比cut内置的shell 更快.请注意,这使一切的前第一最后一个点到beforedot进入之后,一切afterdot.
编辑:
如果要分割任意数量的标记,还有一个替换/重新解释构造:
string=a.b.c.d.e
tokens=(${string//\./ })
Run Code Online (Sandbox Code Playgroud)
你用空格替换点,然后由于它周围的括号而被解释为数组声明+定义.
然而,我发现这对于打击兄弟姐妹和后代的可移植性较差.例如,它在我最喜欢的shell中不起作用zsh.
数组需要使用大括号取消引用,并从0开始索引:
echo "Third token: ${tokens[2]}"
Run Code Online (Sandbox Code Playgroud)
您也可以通过[@]取消引用整个数组来遍历它们:
for i in ${tokens[@]}
do
# do stuff
done
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
10295 次 |
| 最近记录: |