嘿伙计们,我遇到了将变量传递给%exe部分代码的问题。需要你的帮助。
这是我在bash脚本中使用的工作代码:
## Function
targz() {
find $1 -type f -name "*.$2" -exec \
bash -c 'old=$(basename {}); new=${old/%exe/tar\.gz}; \
tar -zcvf $new $old; ' \;
}
## Function Call
## targz [directory] [extension]
targz . 'exe';
是的我尝试过这样的事情:
new=${old/%$2/tar\.gz};
但它生成的文件名如:file.exetar.gz
答案 0 :(得分:5)
尝试:
targz() {
find $1 -type f -name "*.$2" -exec \
bash -c 'old=$(basename {}); new=${old/'"$2"'/tar\.gz}; \
tar -zcvf $new $old; ' \;
}
诀窍是退出单引号,以便执行变量扩展。
答案 1 :(得分:4)
使用env
为bash
设置环境变量:
targz() {
find "$1" -type f -name "*.$2" -exec \
env ext="$2" bash -c 'old=$(basename "{}"); new=${old/%$ext/tar\.gz}; \
tar -zcvf "$new" "$old"; ' \;
}
我添加了一些引用来防止文件名中的空格。