如何使用GNU Parallel解析CSV列字符串中的Shell变量?
解决GNU Parallel解析CSV列中Shell变量的问题
要让GNU Parallel正确解析CSV第5列里的${OUTDIR}变量,核心是先移除列中多余的单引号,再让Shell完成变量展开。以下是几种可行的解决方案:
方法1:移除引号后通过子Shell解析变量
先用sed去掉第5列前后的单引号,再通过eval echo展开变量,最后执行mkdir:
parallel --colsep ',' 'dir=$(echo {5} | sed "s/^\'\'//;s/\'\'$//"); mkdir -p "$(eval echo "$dir")"' :::: data.csv
方法2:利用Shell参数替换简化处理
通过Shell参数替换直接清除单引号,再交给bash子进程解析变量:
parallel --colsep ',' 'dir=${5//\'\'/}; mkdir -p "$(bash -c "echo $dir")"' :::: data.csv
方法3:直接让bash处理整个命令
把命令逻辑完全交给bash子进程,自动完成变量展开和引号处理:
parallel --colsep ',' 'bash -c "mkdir -p ${5//\'\'/}"' :::: data.csv
原理说明
原命令中{5}会被原样替换为CSV里的'${OUTDIR}/test',单引号会阻止Shell解析变量,导致创建名称包含${OUTDIR}的无效目录。上述方法都先移除了多余的单引号,再让Shell解析${OUTDIR}变量,确保mkdir接收到实际的路径。
内容的提问来源于stack exchange,提问作者tvandinther
相关产品推荐
相关产品推荐

