我想通过使用函数来发生6次事情来整理我的bash脚本之一。该脚本从config.ini文件中设置了许多变量,然后列出它们并要求确认用户希望继续使用这些预定义的值。如果没有,则逐步通过每个变量并要求输入新的变量(或将其保留为空并按回车键以使用预定义的值)。这段代码可以完成该操作:在bash中间接引用,为什么这不起作用?
echo Current output folder: $OUTPUT_FOLDER
echo -n "Enter new output folder: "
read C_OUTPUT_FOLDER
if [ -n "$C_OUTPUT_FOLDER" ]; then OUTPUT_FOLDER=$C_OUTPUT_FOLDER; fi
的想法是设置$OUTPUT_FOLDER
到$C_OUTPUT_FOLDER
价值,但只有当$C_OUTPUT_FOLDER
不为空。如果$C_OUTPUT_FOLDER
为空,它将不会执行任何操作并将$OUTPUT_FOLDER
保留为稍后在脚本中使用的状态。
有6个变量是从config.ini中设置的,所以此块当前重复6次。我做了一个功能new_config()
主要内容如下:
new_config() {
echo Current $1: ${!2}
echo -n "Enter new $1: "
read $3
if [ -n "${!3}" ]; then $2=${!3}; fi
}
我与调用它(在这种情况下):
new_config "output folder" OUTPUT_FOLDER C_OUTPUT_FOLDER
当我运行该脚本,它在一个错误if
line:
./test.sh: line 9: OUTPUT_FOLDER=blah: command not found
那么,什么给了?脚本中的代码块可以正常工作,并且(在我相当新颖的眼中),函数应该完全一样。
在此先感谢任何指针。
不确定你要做什么,但问题出在'$ 2 = $ {!3}'。 – devnull
是的,我想了很多,谢谢。我不明白为什么它会引用变量,所以'$ 2 = $ {!3}'扩展为'OUTPUT_FOLDER = $ C_OUTPUT_FOLDER'(因为错误提到了'OUTPUT_FOLDER = blah',“blah”就是我输入的内容作为新的输出文件夹),但然后抛出这个错误。我想让用户有机会在每次运行时更改脚本中的任何预定义变量(无需直接编辑config.ini文件)。因此,如果他们输入一个新值,请将'$ OUTPUT_FOLDER'设置为它,否则(如果$ C_OUTPUT_FOLDER为空)则保留ini文件中定义的$ OUTPUT_FOLDER。 – user3370369