【发布时间】:2018-01-22 15:28:57
【问题描述】:
我对 Bash 还很陌生,所以请原谅我,但我正在构建一个可以接受用户输入命令的 Bash 脚本,该命令可以有很多开关。我需要编写一个从用户提供的命令中提取特定数据的函数。
我似乎无法找到一种方法来提取“-mode”之后的每个单词并将其推送到某种数组或列表中。
以下是用户输入命令的示例:
/home/custom/function/that/accepts/a/billion/switches random_info random_info2 -worker vendor_schmo -switch_one -anotherOne -more_switches -optionTwo -mode FOO -mode BAR -mode BAZ -mode BAG -mode DAT -mode RAR
我试过摆弄 awk -F "-mode" '{ print $1 }' 但没有奏效。任何建议将不胜感激!
这是提取此信息的脚本中的 sn-p:
manualRunMain(){
local command
manualRunHeaderPrint
echo
echo
echo
echo
lineBreakPrint
read -p "Enter your command here: " command
sleep .25
manualRun "$command"
}
manualRun(){
manualRunHeaderPrint
jobRunSubHeaderPrint
pullModeNames "$1"
}
pullModeNames(){
}
【问题讨论】:
-
欢迎来到堆栈溢出,您能否在代码标签中添加示例预期输出?
-
我认为我不需要任何输出,我只需要将每个“-mode”之后的每个单词推入一个数组即可。我认为这就足够了,我可以从那里拿走它。
-
一般来说,您应该考虑遵循BashFAQ #35 中给出的做法来满足您的特定目的。您的命令给出的参数列表不是作为字符串传递——而是作为字符串数组传递——并且将其视为字符串意味着你采用了一堆错误(例如例如,您将失去区分
-foo "bar baz"和-foo bar baz的能力。 -
(如果你有一个字符串并且需要以一种类似于 shell 的方式将它拆分成一个字符串列表,这样就可以使用标准工具解析该数组,这本身就是一个相当复杂的问题,其答案比
array=( $string )复杂得多;也就是说,它是一个已经存在公认的规范答案的问题在我们的知识库中)。
标签: string bash parsing scripting