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