BASH选项覆盖重命名命令中的$2变量
我正在努力让这个程序工作,但我做不到。我想在Rename命令中使用的$2变量接受Select Opt指定的内容。在Select Opt结构中,有没有办法在Rename命令中使用$1、$2变量BASH选项覆盖重命名命令中的$2变量,bash,select,rename,options,Bash,Select,Rename,Options,我正在努力让这个程序工作,但我做不到。我想在Rename命令中使用的$2变量接受Select Opt指定的内容。在Select Opt结构中,有没有办法在Rename命令中使用$1、$2变量 OPTIONS="\"Quit\" \"Replace\"" echo $OPTIONS eval set $OPTIONS select opt in "$@"; do if [ "$opt" = "Quit" ]; then echo done exit e
OPTIONS="\"Quit\" \"Replace\""
echo $OPTIONS
eval set $OPTIONS
select opt in "$@"; do
if [ "$opt" = "Quit" ]; then
echo done
exit
elif [ "$opt" = "Replace" ]; then
ls
echo "old pattern"
read OLD
echo "new one"
read NEW
rename -n "s/($OLD)(.*)/$NEW$2/" *.jpg
最终结果
rename -n "s/($OLD)(.*)/$NEW$2/" *.jpg
是$NEW,字符串“Replace”而不是(.*)部分
谢谢你的帮助
编辑:我已根据skmrx建议修改了代码。现在结果不同了,$1、$2是空的。重命名命令没有使用它们,代码仍然无法工作
OPTIONS=("Quit" "Replace")
echo "${OPTIONS[@]}"
select opt in "${OPTIONS[@]}"; do
if [[ "$opt" = "Quit" ]]; then
echo done
exit
elif [[ "$opt" = "Replace" ]]; then
ls
echo "old pattern"
read OLD
echo "new one"
read NEW
rename -n "s/($OLD)(.*)/$NEW$2/" *.jpg
else
clear
echo bad option
fi
done
指令
rename -n "s/($OLD)(.*)/$NEW$2/" *.jpg
仅使用$NEW变量的内容执行,而$2保持为空,没有文本。简而言之,
eval set$OPTIONS
将覆盖您的$1
和$2
。请尝试在下一行中回显它们
现在,以下是一些可以改进脚本并使其不易出错的方法:
OPTIONS
成为一个数组:OPTIONS=(“退出”“替换”)
。这将允许您在选项名称中保留空格,而无需费心转义双引号。要回显选项,可以使用echo“${options[@]}”
评估设置
。这只会因为覆盖位置参数$1
,$2
等而导致问题选择中使用“${OPTIONS[@]}”
而不是中的“$@”
——这是必要的,因为设置将不再使用
[…]]
而不是[…]
。在第一种情况下犯错误的可能性较小非常感谢你的评论。