Rol*_*and 9 bash escaping brace-expansion
我想在bash脚本中做这样的事情.我正在使用bash 4.1.10.
# rm -rf /some/path/{folder1,folder2,folder3}
Run Code Online (Sandbox Code Playgroud)
从shell本身可以很好地(并且如预期的那样)工作.它会删除3个所需的文件夹,而不会触及所有其他文件夹.
当我把它放入脚本时会发生不必要的事情.例如,我的脚本:
#!/bin/bash
set -x
VAR="folder1,folder2,folder3"
rm -rf /some/path/{$VAR}
Run Code Online (Sandbox Code Playgroud)
执行此脚本时,不会删除文件夹.
我认为这是因为发生了一些不需要的引用.脚本输出使用#!/bin/bash -x:
rm -rf '/some/path/{folder1,folder2,folder3}'
Run Code Online (Sandbox Code Playgroud)
由于'商标,当然不能成功.
如何在我的脚本中使用它?
Mic*_*man 11
根据手册页:
扩展的顺序是:括号扩展,波浪扩展,参数,变量和算术扩展和命令替换(以从左到右的方式完成),单词拆分和路径名扩展.
因此,要解决这个问题,请添加另一个级别的扩展:
eval "rm -rf /some/path/{$VAR}"
Run Code Online (Sandbox Code Playgroud)
由于您正在编写脚本,因此没有理由使用eval技巧编写难以维护的代码
VAR="f1,f2,f3"
IFS=,
set -- $VAR
for f; do
rm -r "/path/to/$f"
done
Run Code Online (Sandbox Code Playgroud)
要么
VAR=( f1 f2 f3 )
for f in "${VAR[@]}"; do
rm -r "/path/to/$f"
done
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5615 次 |
| 最近记录: |