在bash中存储多个响应

时间:2013-09-10 12:06:36

标签: arrays bash shell

我试图创建一个脚本,要求我添加一个文件路径并存储它,然后一直问我是否要存储更多,直到我说不。我然后想让它问我想要什么文件夹在所有以前的文件路径中创建和创建该文件夹。问题是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

while [“$ yn”==“y”];做    read -p“你想把这个文件称为什么?:”folderName        #will创建一个循环,使用dir数组和文件名var。

创建目录
read -p "Do you want to add another file to these directories? : " yn `

2 个答案:

答案 0 :(得分: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[@]}"

答案 1 :(得分:1)

问题出在以下几行:

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

你想说:

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

(这样说也可以避免需要计数器x。)