shell脚本问题

qq_43619119 2020-07-25 10:48:58
请教一个问题:
背景:一个文件夹里面有很多个名称类似的文档,比如pi_1_0,pi_2_0,pi_3_1....... 。
目的:shell脚本实现将文件夹里面找到的所有文档,在另一个文件夹里面创建一个处理过的名称也是一一对应的文档,比如找到的pi_1_1,处理过的对应也是pi_1_1;
遇到的问题:我在文件夹里面找文档的时候文件名会包含变量,shell脚本识别不了。
for((i=0;i<255;i++))
do
for((j=0;j<255;j++))
do
if[ -e bin/pi_$i_$j_];then #此处包含变量,我遇到的问题处
###
fi
done
done
我尝试过这样:
for((i=0;i<255;i++))
do
for((j=0;j<255;j++))
do
b="pi_$i_$j" #用双引号会使变量展开
if[ -e bin/$b_];then
###
fi
done
done
但是还是不行,应该怎么处理达到我的目的呢?
...全文
10592 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
alittlenewbiek 2020-08-01
  • 打赏
  • 举报
回复
引用 1 楼 品牌 的回复:
if[ -e bin/pi_$i_$j_];then 这个地方改成
if[ -e bin/pi_${i}_${j}_];then 试一下

确实这样,变量展开时,bash看到$var会把$后面的所有字符、直到第一个分割符为止都当作变量名。
下划线并非分割符,所以$i_$j相当于${i_}${j},由于i_没有定义,所以展开为空,最终只有j展开。
为了避免这种情况的发生,一般建议都使用{}包裹住变量名。
黄先生灬 2020-07-29
  • 打赏
  • 举报
回复
$i和$j的值不是一样的吗,不需要嵌套,砍掉一个嵌套
品牌 2020-07-25
  • 打赏
  • 举报
回复
if[ -e bin/pi_$i_$j_];then 这个地方改成
if[ -e bin/pi_${i}_${j}_];then 试一下

18,773

社区成员

发帖
与我相关
我的任务
社区描述
Linux/Unix社区 专题技术讨论区
社区管理员
  • 专题技术讨论区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧