我有一个像这样在 echo 上显示的变量
$ echo $var
129 148
Run Code Online (Sandbox Code Playgroud)
我只需要 129 作为输出。我将如何拆分 129 和 148?
Jos*_* R. 68
除了jasonwryan 的建议,您还可以使用cut:
echo $var | cut -d' ' -f1
Run Code Online (Sandbox Code Playgroud)
以上cutsecho输出带有空格分隔符 ( -d ' ') 并输出第一个字段 ( -f1)
gog*_*oud 22
一种巧妙的方法是使用 bash 数组在空格上拆分字符串。您可以简单地使用方括号声明一个数组:
var="129 148 181"
vars=( $var )
echo "First word of var: '${vars[0]}'"
echo "Second word of var: '${vars[1]}'"
echo "Third word of var: '${vars[2]}'"
echo "Number of words in var: '${#vars[@]}'"
Run Code Online (Sandbox Code Playgroud)
${var%% *}$ echo "$var"\n129 148\n$ echo "${var%% *}"\n129\nRun Code Online (Sandbox Code Playgroud)\n\n\n\n
echo "${var% *}" && echo "${var#* }"... \xe2\x80\x93 杰森乌瑞恩
虽然有无数种方法可以回答您的问题,但最简单的是参数扩展,这是 Jason 在评论中建议的。我相信这是解决这个问题的正确工具。
\ncut顺便说一句,这里的其他答案(管道到数组并拆分为数组)并没有错。它们是通用的解决方案,当您的下一个问题是\xe2\x80\x9c 那么,我如何获得第二个或第 n 个数字?\xe2\x80\x9d简单的问题很少会长期保持简单。
这种方法可能不是在所有地方都适用,尽管我很难找到一个不适用的地方。当然bash,它可以在大多数 Unix 机器上的默认交互式 shell 和zshMacOS 中的默认交互式 shell 中运行。即使是在路由器上找到的有限 shell,例如我预计会破坏的ash和dash,也可以与参数扩展一起正常工作。
${var%% *}关于对比的旁注${var% *}您可能已经注意到,我使用了两个百分号,而不是杰森建议的一个。区别在于%%删除最长的匹配字符串和%最短的。例如,如果var包含三个数字,您会看到以下内容:
$ echo "$var"\n129 148 167\n$ echo "${var%% *}"\n129\n$ echo "${var% *}"\n129 148\nRun Code Online (Sandbox Code Playgroud)\n如果您已经做到了这一点,您可能想知道,\xe2\x80\x9c我在哪里可以了解有关参数扩展这个魔法的更多信息?\xe2\x80\x9d 答案是,在您的 shell 文档中,例如,man bash。以下是联机帮助页中参数扩展部分的摘录bash:
${参数#字}
\n${参数##单词}
\n单词\ n扩展为产生与路径名\n扩展中的模式相同的模式,并使用\n模式匹配\n 下描述的规则与\n参数的扩展值进行匹配。\n如果模式与值的开头\n匹配的\n参数,\n则扩展的结果是\n参数的\n扩展值,具有最短匹配模式(\xe2\x80\x98 # \xe2\x80\x99 情况)或\n最长匹配模式( \xe2\x80\x98 ## \xe2\x80\x99 情况) 被删除。\n如果\n参数\nis\n @ \nor\n *,\n模式删除操作将依次应用于每个位置参数,\n扩展是结果列表。\n如果\n参数是一个下标为\n @或\n *的数组变量,\n模式删除操作将依次应用于\n数组的每个成员,并且扩展为结果列表。
\n${参数%单词}
\n${参数%%单词}
\n该单词将被扩展以产生一个模式,\n就像在路径名扩展中一样,并使用\n模式匹配中描述的规则\n与参数\n的扩展值进行匹配。\n如果模式与\n扩展值的尾部部分匹配\n n参数,\n则扩展的结果是 \n参数的扩展值,\n具有最短匹配模式(\xe2\x80\x98 % \xe2\x80\x99 情况)或\n最长匹配模式(\n xe2\x80\x98 %% \xe2\x80\x99 case) 已删除。\n如果\n参数\nis\n @ \nor\n *,\n模式删除操作将依次应用于每个位置参数,并且扩展是结果列表。\n如果参数\n 是一个下标为\n @或\n *的数组变量,\n模式删除操作将依次应用于\n数组的每个成员,并且扩展是结果列表。
\n| 归档时间: |
|
| 查看次数: |
118385 次 |
| 最近记录: |