任务:用分隔符连接字符串数组,dilimeter为“/”。
元任务:我有一个包含许多文件的文件夹。需要将它们复制到另一个文件夹中。
所以我需要得到“文件名”和“文件夹路径”。
怎么了:分隔符“/”不正确。这和我的弦乐没有关系。如果我尝试使用“\/”-字符串将完全消失。
发生什么事?

loc_path='./test/*'

delim='\/'

for itt in $loc_path; do
    IFS=$delim
    read -ra res <<< "$itt"
    str=''
    for ((i = 1; i \<= ${#res[@]}; i++)); do
        #str=($str${res[$i]}$delim)
        str="$str${res[$i]}$delim"
    done
    echo $str
done

请给出两个答案:
如何解决任务问题
解决元任务的更好方法

最佳答案

delim='\/'中存在问题。首先,你不需要保护斜杠。其次,所有字符都已经在简单引号之间得到保护。
连接有语法问题。这里不能用括号!它们可以用来打开一个子壳。我们不需要那样。
为了解决你的“元任务”,你应该避免使用IFS或read。它们使用起来很复杂(例如,在全局修改IFS时,您可以更改echo显示res数组的方式)。当你排除故障时,它会误导你……)我建议你使用更简单的工具,如:basename等。
这里有几个脚本来解决你的元(学者?)任务:

# one line :-)
cp src/* dst/


# to illustrate basename etc
for file in "$SRC/"*; do
    dest="$DST/$(basename $file)"
    cp "$file" "$dest"
done

# with a change of directory
cd "$SRC"
for file in *; do cp "$file" "$DST/$file"; done
cd -

# Change of directory and a sub shell
(cd "$SRC" ; for file in *; do cp "$file" "$DST/$file"; done)

10-04 20:14
查看更多