Linux sh 脚本将句子拆分成单词
Linux sh script split sentence into words
我有一个脚本,它将一个句子作为输入 </code>。
我如何将 <code>
例如 "a b c d e"
拆分为 a
b
c
d
e
并单独访问它们?
使用 sh
而不是 bash
.
与bash
不同,sh
不支持数组。如果您需要访问每个元素,您可以使用默认的拆分功能,例如 for
循环:
for w in ; do
echo $i
done
输出:
a
b
c
请注意 </code> 周围缺少引号。这确保它被拆分成单词而不是被单一地对待。将 <code>echo
替换为您想要的任何处理方式。
如果您只对特定元素感兴趣,可以使用 cut
,它可以在任何 shell 中使用,因为它是一个程序,而不是 sh
的一部分:
echo "" | cut -d ' ' -f 2
输出:
b
在这种情况下,</code> 周围的引号是可选的,因为 <code>echo
无论如何都会转储所有内容。
一个脚本被命名为a.sh
。
#!/bin/bash
tokens=( )
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 "a b c d e"
。您可以看到如下结果。
$ 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
祝你好运!
您只需使用双引号 (") 来防止 shell 将 a、b 和 c 解析为单独的参数。
EXAMPLE:
vi cat tmp.sh
#!/bin/sh
echo '=' ', $@=' $@
./tmp.sh "a b c"
= a b c , $@= a b c
./tmp.sh a b c
= a , $@= a b c
备注:
语法“$1”阻止 shell 来自 "expanding" 第一个参数,因此您看到的是“$”而不是 "a"
a b c 被视为 3 个参数($1、$2 和 $3); "a b c" 被视为一个参数 ($1)。在此示例中,"a b c"(双引号)和 'a b c'(单引号)是等价的。
"quote" 语法是相同的,无论您使用的是 Bourne shell ("sh") 还是 "bash".
如果您想将聚合 ("a b c") 视为单独的元素,您可以使用“$@”参数。
最后,“/bin/sh”在大多数系统上是 Posix shell,而不是 Bourne shell。因此并不一定具有 Bourne shell 的局限性:
a.sh
echo | cut -d ' ' -f
运行 a.sh "a b c d e" 3
.
c
我有一个脚本,它将一个句子作为输入 </code>。
我如何将 <code>
例如 "a b c d e"
拆分为 a
b
c
d
e
并单独访问它们?
使用 sh
而不是 bash
.
与bash
不同,sh
不支持数组。如果您需要访问每个元素,您可以使用默认的拆分功能,例如 for
循环:
for w in ; do
echo $i
done
输出:
a
b
c
请注意 </code> 周围缺少引号。这确保它被拆分成单词而不是被单一地对待。将 <code>echo
替换为您想要的任何处理方式。
如果您只对特定元素感兴趣,可以使用 cut
,它可以在任何 shell 中使用,因为它是一个程序,而不是 sh
的一部分:
echo "" | cut -d ' ' -f 2
输出:
b
在这种情况下,</code> 周围的引号是可选的,因为 <code>echo
无论如何都会转储所有内容。
一个脚本被命名为a.sh
。
#!/bin/bash
tokens=( )
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 "a b c d e"
。您可以看到如下结果。
$ 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
祝你好运!
您只需使用双引号 (") 来防止 shell 将 a、b 和 c 解析为单独的参数。
EXAMPLE:
vi cat tmp.sh
#!/bin/sh
echo '=' ', $@=' $@
./tmp.sh "a b c"
= a b c , $@= a b c
./tmp.sh a b c
= a , $@= a b c
备注:
语法“$1”阻止 shell 来自 "expanding" 第一个参数,因此您看到的是“$”而不是 "a"
a b c 被视为 3 个参数($1、$2 和 $3); "a b c" 被视为一个参数 ($1)。在此示例中,"a b c"(双引号)和 'a b c'(单引号)是等价的。
"quote" 语法是相同的,无论您使用的是 Bourne shell ("sh") 还是 "bash".
如果您想将聚合 ("a b c") 视为单独的元素,您可以使用“$@”参数。
最后,“/bin/sh”在大多数系统上是 Posix shell,而不是 Bourne shell。因此并不一定具有 Bourne shell 的局限性:
a.sh
echo | cut -d ' ' -f
运行 a.sh "a b c d e" 3
.
c