任务:用分隔符连接字符串数组,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)