[英]Linux sh script split sentence into words
我有一个脚本,将一个句子输入$1
。 如何将$1
(例如"abcde"
拆分a
b
c
d
e
并分别访问它们? 使用sh
而不是bash
。
与bash
不同, sh
不支持数组。 如果需要访问每个元素,则可以在for
循环中使用默认的拆分功能:
for w in $1; do
echo $i
done
输出:
a
b
c
请注意,缺少$1
左右的报价。 这样可以确保将其拆分为单词,而不是对其进行整体处理。 用处理您内心渴望的任何东西代替echo
。
如果您只对特定元素感兴趣,则可以使用cut
,因为它是一个程序,而不是sh
一部分,所以它可以在任何shell中使用:
echo "$1" | cut -d ' ' -f 2
输出:
b
在这种情况下, $1
左右的引号是可选的,因为echo
会转储所有内容。
脚本名为a.sh
#!/bin/bash
tokens=( $1 )
echo ${tokens[*]} # all array data
echo ${#tokens[@]} # length of array
echo ${!tokens[@]} # get all index
echo ${tokens[0]} # first data in array
echo ${tokens[1]} # second data in array
for index in ${!tokens[@]}; do
echo $index : ${tokens[$index]}
done
运行a.sh "abcde"
。 您可以看到如下结果。
$ bash a.sh "a b c d e"
a b c d e
5
0 1 2 3 4
a
b
0 : a
1 : b
2 : c
3 : d
4 : e
祝好运!
您只需要使用双引号(“)来防止外壳程序将a,b和c解析为单独的参数。
EXAMPLE:
vi cat tmp.sh
#!/bin/sh
echo '$1=' $1 ', $@=' $@
./tmp.sh "a b c"
$1= a b c , $@= a b c
./tmp.sh a b c
$1= a , $@= a b c
笔记:
语法“ $ 1”防止外壳程序“扩展”第一个参数,因此您看到的是“ $”而不是“ a”
abc被视为3个参数($ 1,$ 2和$ 3); “ abc”被视为一个参数($ 1)。 在此示例中,“ abc”(双引号)和“ abc”(单引号)将是等效的。
无论您使用的是Bourne shell(“ sh”)还是“ bash”,“ quote”语法都是相同的。
如果要将聚合(“ abc”)视为单独的元素,则可以使用“ $ @”参数。
最后,大多数系统上的“ / bin / sh”是Posix shell,而不是Bourne shell。 因此,不一定共享Bourne shell的局限性:
灰
echo $1 | cut -d ' ' -f $2
运行a.sh "abcde" 3
。
c
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.