从命令行更改bash脚本中变量的默认值

时间:2015-10-29 14:08:11

标签: bash shell

我有一个bash脚本,它有一个默认值的变量,在脚本的开头定义。

富= “默认”

该脚本还接受命令行选项以覆盖执行该变量的值。

./ myscript -foo“new val”

没有问题。但我想知道的是,是否有任何方法可以将通过命令行传递的值保持在稍后的进一步执行中。

澄清:

foo="default"
echo $foo

执行1:

$:./的MyScript

默认

执行2:

$:./ myscript -foo“new value”

新值

执行3:

$:./的MyScript

新值

我假设答案是否定的,但我想我会检查那些可能更熟悉bash或脚本的人。如果可能,我想避免将值存储在文件中,但我不反对这个想法,如果有一个文件夹通常用于不是用户主目录的东西。

2 个答案:

答案 0 :(得分:0)

标准习语是

: ${FOO:=default}

如果FOO具有非空值,则不会更改;否则设置为给定的默认值。要保留现有的空值,请使用

: ${FOO=default}

要使用非默认值调用脚本,请使用

FOO=custom ./myscript

FOO的环境中为myscript提供值。或者,如果您的-foo选项为FOO分配了值,请确保在代码之后放置: ${FOO=default}

答案 1 :(得分:0)

我最初以评论威胁你,这是一个MWE;)

bar.sh

#!/bin/bash
: ${FOO='default'}
sed -Ri "s/(?<=FOO=')[a-z]+/$FOO/" bar.sh

根据变量FOO的有效值,您必须更改sed中的正则表达式。

我用super-sed做了这个,它为扩展的正则表达式模式提供了-R。在这种情况下为后视。