我正在编写一个bash脚本,我需要根据参数做两个不同的操作。
例如,在没有params(declare module '*.vue' {
import Vue from 'vue';
export default Vue;
}
)的情况下调用我的脚本,它应该这样做:
./script
如果我向我的脚本(docker-compose run ...
)发送一个参数,它应该这样做:
./script -d
所以docker-compose -f file run...
是根据参数添加的唯一部分。我不想在每个if语句中重复整个代码,有更好的方法吗?
答案 0 :(得分:3)
一种选择是使用数组。如果存在-d
,则将-f "$file"
添加到数组中。
args=()
[[ $1 == -d ]] && args+=(-f "$file")
docker-compose "${args[@]}" run...
另一种方法是仅在设置变量时使用:+
替换备用值。如果$option
设置为-d
,则替换-f "$file"
;如果它是空的,那就把它留空。
option=
[[ $1 == -d ]] && option=-d
docker-compose ${option:+-f "$file"} run...
这两个选项都将处理包含正确空格的文件名。
答案 1 :(得分:0)
处理args的许多不同方法(包括.controller("newsAppCtrl",['$scope','$location','$routeParams',($scope, $location, $routeParams)=>{
console.log($routeParams); //empty object
setTimeout(function () {
console.log($routeParams); //in this case property is there
},100);
),但最简单的是,
getopts
答案 2 :(得分:0)
解析参数的方法有很多种。 test
(或[[
)是最简单的方法,但如果存在多个条件的可能性,则case
语句可能更可取:
#!/usr/bin/env bash
case "$1" in;
-d) args=( -f "file" ) ;;
"") args=() ;;
*) echo "Usage error." >/dev/null; exit 1 ;;
esac
docker-compose "${args[@]}" run
对于更大规模的选项处理,getopts
可能是要走的路:
#/usr/bin/env bash
args=()
while getopts hdf: opt; do
case "$opt" in
h) printf "Usage: ${0##*/} [-d]"; exit 0 ;;
d) args=( -f "file" ) ;; # use a static file
f) args=( -f "$OPTARG" ) ;; # use a user-specified file
esac
done
shift $((OPTIND - 1))
docker-compose "${args[@]}" run
有关使用信息,请搜索" SHELL BUILTIN COMMANDS" getopts
的部分。