GJ.*_*GJ. 10 linux search bash
在 bash 脚本中,
我有一个字符串,其中包含由一个或多个空格分隔的多个单词。IE:
Name Age Sex ID Address
Run Code Online (Sandbox Code Playgroud)
如果我想找到任何一个词,比如我想找到“年龄”这个词的索引,我该怎么做?
有什么命令可以直接返回我想要的单词的索引号吗?
谢谢。
kop*_*hke 13
Bash自己在字符串中执行分词——事实上,通常情况下,避免这是一个问题,而引用的原因是如此重要。在您的情况下很容易利用它:只需将您的字符串放入一个数组中而不引用它 - bash 将使用分词来分隔各个元素。假设您的字符串存储在变量中$str,
ar=($str) # no quotes!
Run Code Online (Sandbox Code Playgroud)
将返回一个包含 5 个元素的数组。您的数组索引是您的单词索引(从 0 开始计数,就像在大多数脚本和编程语言中一样),即使用“年龄”访问
${ar[1]} # 0 => Name, 1 => Age, 2 => Sex, 3 => ID, 4 => Address
Run Code Online (Sandbox Code Playgroud)
或者,如果您需要按内容查找元素索引,请遍历数组,即
function el_index {
cnt=0; for el in "${ar[@]}"; do
[[ $el == "$1" ]] && echo $cnt && break
((++cnt))
done
}
el_index "Age" # => 1
Run Code Online (Sandbox Code Playgroud)
小智 5
$ export FOO="Name Age Sex ID Address"
Run Code Online (Sandbox Code Playgroud)
将 *Age 替换为 Age——这将删除“Age”之前的所有内容:
$ echo ${FOO/*Age/Age}
Age Sex ID Address
Run Code Online (Sandbox Code Playgroud)
在“年龄”之前获取任何东西
$ echo ${FOO/Age*/}
Name
Run Code Online (Sandbox Code Playgroud)
获取该字符串的长度(即“Age”的索引):
$ BEGIN=${FOO/Age*/}
$ echo ${#BEGIN}
7
Run Code Online (Sandbox Code Playgroud)