我写了一个脚本,但从标准输入中获取文件夹名称时遇到问题 这是我的问题;
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
从输入中获取文件夹名称的正确方法是什么?
答案 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/。