shell 为模块分配编号

yws3nbqq  于 2023-02-09  发布在  Shell
关注(0)|答案(2)|浏览(140)

我需要能够分配一个号码给一个模块,我目前的代码如下。差距是它需要被分配。

assignmodules(){
#Assign first module
x=1
modules=$(ls ./modules)
for module in modules; do
   
  echo "$module assigned to slot $x"
  x=$(x+1)
done
}

几件事:模块标题必须在不同的函数中打印,所以我不能在for循环中打印它。模块需要这样运行:

case $choice in 
1) module1
2) module2
3) module3
etc.

需要打印如下(如果我发现一个很好的解决方案,不这样做的权利,我可能仍然使用。):

[1] Module1 [2] Module2
[3] Module3 [4] Module4
etc.

我在空白处试过这个:[{x}] module = $module(我不认为这正是我所尝试的,我相信它略有不同,但我不记得了)我希望它像上面描述的那样,但我不认为它会。

xmjla07d

xmjla07d1#

如果使用Bash,只需使用一个数组、一些全局匹配和特殊的参数扩展。

assignmodules() {
    set -- ./modules/*
    modules=(0 "${@/#./modules/}")
    unset 'modules[0]'
    declare -p modules # Optionally show result
}

您可以使用打印模块列表的位置

for i in "${!modules[@]}"; do
    echo "[$i] ${modules[i]}"
done

或者

for i in "${!modules[@]}"; do
    echo -n "[$i] ${modules[i]} "
    (( i % 2 == 0 )) && echo
done

(( i % 2 )) && echo

还建议在脚本的开头添加shopt -s nullglob,尤其是模块目录有时可能为空时。
最后,如果你想让用户选择,看select命令。你可能不需要手动显示它们。运行help select

wswtfjt7

wswtfjt72#

只需将模块放入数组中:数字索引数组(默认类型)的索引是自然编号的(注意,这些数字从0开始,而不是从1开始)。

assignmodules() {
  declare -ga modules            # explicitly declare global array (optional)
  modules=( modules/* )          # put all modules directory entries in an array
  modules=( "${modules[@]#*/}" ) # strip modules/ prefix off each entry
}

assignmodules                    # calling that function leaves modules assigned

# to print your list of modules in the specific format requested might look like:
print_args=( )                            # generate format string argument array
for modules_idx in "${!modules[@]}"; do   # iterate over indices in array
  module=${modules[$module_idx]}          # retrieve corresponding module name
  print_args+=( "[$module_idx]" "$module" ) # append to list of stuff to print
done

# format string is repeated until all arguments are consumed
# so this way we get two columns as you requested
printf '%s %s\t%s %s\n' "${print_args[@]}" # actually print our list

相关问题