从输入中获取文件夹名称的正确方法

时间:2018-09-21 08:42:48

标签: bash stdin

我写了一个脚本,但从标准输入中获取文件夹名称时遇到问题 这是我的问题;

myfunc

 #!/bin/bash

audio=$1

mkdir -p ${audio}_rnn

...
rest of code
...

我调用我的函数:

$./myfunc testdir

这样,我得到了预期的输出,这意味着我在当前目录中有了另一个名为testdir_rnn的目录。

但是当我这样调用我的函数时:

$./myfunc testdir/

我有问题;它在testdir文件夹内创建_rnn文件夹,原因是: 在这种情况下,echo $ {audio} _rnn是testdir / _rnn

从输入中获取文件夹名称的正确方法是什么?

4 个答案:

答案 0 :(得分:6)

您只需要修剪'/'。请在您的代码中使用${1%/},如下所示:

audio=${1%/}

mkdir -p ${audio}_rnn

...
rest of code
...

答案 1 :(得分:1)

您可以使用正则表达式删除sed的最后一个“ /”:

#!/bin/bash 
echo 'Dir/test/' | sed 's/\/$//'

输出:目录/测试

答案 2 :(得分:0)

假定该目录将不带上级传递。 您可以使用cut

之类的东西

#!/bin/bash

my_dir=$(echo $1 | cut -d "/" -f1)

mkdir -p "${my_dir}_rnn"

... 其余代码 ....

现在使用以下命令运行脚本 ./my_script.sh test_dir./my_script.sh test_dir/(两者都可以)。

答案 3 :(得分:-1)

在变量前添加句点(。),可以根据需要解决此问题。

  #!/bin/bash 
audio=$1 
mkdir -p .${audio}_rnn 

但是要创建目录_rnn,您必须已经有testdir/。