如何在bash中链接多个字符串操作命令?

时间:2018-07-02 15:15:56

标签: bash

我想从文件列表创建目录:

for file in $(ls *.txt); do 
    folder=${file//.txt/ }; 
    folder=${folder//./'/'}; 
    folder=${folder//[[:space:]]/}; 
    mkdir -p $folder;
done

我可以将分配folder的3个字符串操作命令链接到一行吗?

我尝试了几件事,但都没有成功。可以以某种方式使用|运算符吗?

1 个答案:

答案 0 :(得分:1)

Bash无法做到这一点,但是Z Shell (zsh)(非常相似)可以嵌套替换项:

for file in *.txt; do
    folder=${${${file//.txt/ }//./'/'}//[[:space:]]/}; 
    mkdir -p $folder;
done

(您无需执行$(ls *.txt)(以这种方式解析ls就是dangerous:您会丢失所有空格),因为您可以给它*.txt,可以正确处理文件名中的空格。这可以在任何POSIX Shell中使用。)