bash命令行参数替换变量的默认值

Lan*_*est 25 variables bash default command-line-arguments

我有一个包含多个输入文件的脚本,通常这些是默认存储在标准位置并由脚本调用.

但是,有时需要使用更改的输入来运行它.

在脚本中我现在说3个变量$ A $ B和$ C,现在我想用非默认的$ B运行它,明天我可能想用非默认的$ A和$ B来运行它.

我已经了解了如何解析命令行参数: 如何在Bash中解析命令行参数?

但我不知道如何在某些时候处理由命令行语句设置的问题?

我没有足够的代表回答我自己的问题,但我有一个解决方案:

/sf/answers/322732861/

#!/bin/bash
a=input1
b=input2
c=input3
while getopts  "a:b:c:" flag
do
    case $flag in
        a) a=$OPTARG;;
        b) b=$OPTARG;;
        c) c=$OPTARG;;
    esac
done
Run Code Online (Sandbox Code Playgroud)

道歉我显然没有像我想的那样彻底搜索......

cod*_*ape 55

您可以这样做,请参阅bash手册页中的Shell参数扩展

#! /bin/bash

value=${1:-the default value}
echo value=$value
Run Code Online (Sandbox Code Playgroud)

在命令行上:

$ ./myscript.sh
value=the default value
$ ./myscript.sh foobar
value=foobar
Run Code Online (Sandbox Code Playgroud)


nos*_*sid 7

您也可以在脚本之外设置变量,而不是使用命令行参数来覆盖默认值.例如,可以使用foo=54 /tmp/foobar或调用以下脚本bar=/var/tmp /tmp/foobar:

#! /bin/bash
: ${foo:=42}
: ${bar:=/tmp}
echo "foo=$foo bar=$bar"
Run Code Online (Sandbox Code Playgroud)