1

我正在尝试创建一个脚本,它会要求我添加文件路径并存储它,然后一直问我是否要存储更多,直到我说不。然后我希望它问我要创建的文件夹和在所有以前的文件路径中创建该文件夹。问题是 dir 数组似乎只记得最新的条目?这就是我所拥有的。

#!/bin/bash
x="1"
yn="y"
while [ "$yn" == "y" ]; do
read -p "Add a Directory" add
dir=("${dir[$x]}" "$add")
echo ${dir[$x]}
x=$(( $x + 1))
read -p "Do you want to add another directory?: " yn

done

而 [ "$yn" == "y" ]; do read -p "What would you like to call the file?:" folderName #将创建一个循环,使用 dir 数组和文件名 var 创建目录。

read -p "Do you want to add another file to these directories? : " yn `
4

2 回答 2

1

请改用这种更简单的形式:

#!/bin/bash

dir=()

while
    read -p "Add a Directory " add
    dir+=("$add")
    echo "$add"
    read -p "Do you want to add another directory?: " yn
    [[ $yn == [yY] ]]
do
    continue
done

# Do something with "${dir[@]}" e.g.

mkdir -p -- "${dir[@]}"

您还可以使用-e来启用路径名的完成。这将使您更容易指定目录:

read -ep "Add a Directory " add

请注意,我添加了--这将允许您添加具有类似选项的文件名的目录。

更新:您还可以添加检查:

while
    read -p "Add a Directory " add
    if [[ -n $add ]]; then
        echo "$add"
        dir+=("$add")
    else
        echo "Directory name is invalid."
    fi
    read -p "Do you want to add another directory?: " yn
    [[ $yn == [yY] ]]
do
    continue
done

要指定另一个参数:

#!/bin/bash

dir=()

while
    read -p "Add a Directory " add
    dir+=("$add")
    echo "$add"
    read -p "Do you want to add another directory?: " yn
    [[ $yn == [yY] ]]
do
    continue
done

read -p "Folder name: " folder

fullpaths=("${dir[@]/%//$folder}")

mkdir -p -- "${fullpaths[@]}"
于 2013-09-10T12:14:10.407 回答
1

问题出在以下行:

dir=("${dir[$x]}" "$add")

你想说:

dir=("${dir[@]}" "$add")

(这样说也可以避免对 counter 的需要x。)

于 2013-09-10T12:19:42.037 回答