【问题标题】:Adding arguments into array by loop通过循环将参数添加到数组中
【发布时间】:2023-03-26 04:14:02
【问题描述】:

我想创建将创建目录的脚本。 用户必须选择他想要创建的目录数量,然后必须为这些目录命名。

我已经有类似的东西了,但是我卡住了,不知道如何通过循环将参数添加到数组中..

你能告诉我应该怎么做吗?

#!/bin/bash

read year
read group
read student


subjects=()
for directories in ${subjects[*]}
do
  mkdir -p /home/uczelnia/$year/$group/$student/$directories
done

【问题讨论】:

    标签: arrays bash shell loops directory


    【解决方案1】:

    要让用户输入主题并将它们保存在数组 subjects 中,请运行:

    echo "Enter subjects, one per line, type Ctrl-D when done:"
    readarray -t subjects
    

    运行上述代码,输入三个主题:

    Enter subjects, one per line, type Ctrl-D when done:
    Math
    History
    Biology
    

    (在生物学之后的新行,我们看不到它,但用户输入了 Ctrl-D。)

    我们可以通过使用declare -p 检查subjects 确实是我们想要的数组:

    $ declare -p subjects
    declare -a subjects=([0]=$'Math\n' [1]=$'History\n' [2]=$'Biology\n')
    

    一边

    当您使用引用变量时,它们应该用双引号引起来,以防止分词和路径名扩展。因此,替换:

    for directories in ${subjects[*]}
    do
      mkdir -p /home/uczelnia/$year/$group/$student/$directories
    done
    

    与:

    for directories in "${subjects[@]}"
    do
      mkdir -p "/home/uczelnia/$year/$group/$student/$directories"
    done
    

    整个脚本

    read -p "Enter year: " year
    read -p "Enter group: " group
    read -p "Enter student: " student
    echo "Enter subjects, one per line, type Ctrl-D when done:"
    readarray -t subjects
    for directories in "${subjects[@]}"
    do
      mkdir -p "/home/uczelnia/$year/$group/$student/$directories"
    done
    

    【讨论】:

      【解决方案2】:

      这里不需要数组。这可能是你想要做的:

      #!/usr/bin/env bash
      
      read -rp "Enter year: " year
      IFS= read -rp "Enter group: " group
      IFS= read -rp "Enter student: " student
      
      read -rp "Enter number of dirs: " number
      
      for (( i=1; i<=number; i++ )); do
          IFS= read -rp "Enter folder #$i: " folder
          mkdir -p "/home/uczelnia/$year/$group/$student/$folder"
      done
      

      【讨论】:

      • 非常感谢,这是我想要创建的东西
      猜你喜欢
      • 2021-07-01
      • 2012-10-29
      • 2020-04-09
      • 1970-01-01
      • 2019-03-02
      • 2020-10-22
      • 2016-10-12
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多