Bash:如何从参数设置变量并使用默认值

2024-03-16

很明显,使用 shell 脚本可以通过多种方式完成这类事情(比大多数编程语言都多),因为有各种不同的变量扩展方法和程序,例如test and [ and [[, etc.

现在我只是在寻找

DIR=$1 or .

这意味着,我的 DIR 变量应该包含第一个参数中指定的内容或当前目录。

这和有什么区别DIR=${1-.}?

我发现连字符语法令人困惑,并寻求更易读的语法。

为什么我不能这样做?

DIR="$1" || '.'

我猜这意味着“如果 $1 为空,则分配仍然有效(DIR 变为空),因此无效命令 '.'永远不会被处决。”


我在这里看到几个问题。

  1. “我可以写一些真正反映这种逻辑的东西吗”

    是的。有几种方法可以做到这一点。这是一个:

    if [[ "$1" != "" ]]; then
        DIR="$1"
    else
        DIR=.
    fi
    
  2. “这和有什么区别DIR=${1-.}?”

    语法${1-.}扩展到. if $1未设置,但扩展如下$1 if $1被设置——即使$1设置为空字符串。

    语法${1:-.}扩展到. if $1未设置或设置为空字符串。它扩展如下$1除非$1设置为空字符串以外的其他值。

  3. “为什么我不能这样做?DIR="$1" || '.'

    因为这是 bash,而不是 perl 或 ruby​​ 或其他语言。 (请原谅我的冷嘲热讽。)

    在巴什中,||分隔整个命令(从技术上讲,它分隔管道)。它不分隔表达式。

    So DIR="$1" || '.'意思是“执行DIR="$1",如果以非零退出代码退出,则执行'.'”.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Bash:如何从参数设置变量并使用默认值 的相关文章

  • 使用与后期步骤中的 Shell 脚本中的克隆相同的 http git 凭据

    我想要自动化我们的发布过程 并且我有一个 Maven 项目的以下 Jenkins 构建作业 使用配置的 Jenkins 凭证 用户名 密码 克隆 Git 存储库 执行一些 Maven 命令以进行构建 配置一个后步骤来执行一些额外的 Git
  • 快速 shell 命令删除文本文件中的停用词

    我有一个 2GB 的文本文件 我正在尝试从此文件中删除经常出现的英语停用词 我有 stopwords txt 包含这样的 a an the for and I 使用 shell 命令 例如 tr sed 或 awk 执行此操作的快速方法是什
  • 在docker镜像中运行多个脚本

    您好 我想知道是否可以在 docker 容器启动时自动同时运行两个脚本 第一个脚本必须运行客户端应用程序 第二个脚本必须运行服务器应用程序作为后台 You can use CMD在你的Dockerfile https docs docker
  • 从“stdin”读取文件后如何使用“input()”?

    Context 我想要一个简单的脚本 它可以选择多个管道输入中的一个 而不需要EOF when reading a lineUnix Linux 上的错误 它试图 接受多行管道文本 等待用户选择一个选项 将该选项打印到标准输出 所需用途 p
  • 将用户添加到组但运行“id”时未反映

    R 创建了一个名为 Staff 的组 我希望能够在不以 sudo 身份启动 R 的情况下更新软件包 所以我使用以下方法将自己添加到员工中 sudo usermod G adm dialout cdrom plugdev lpadmin ad
  • shell 脚本无法将命令行输出保存到变量中

    我正在尝试执行 shell 命令 然后使用 shell 脚本将输出保存到变量中 所以我使用这样的反引号 out ls l print out 该代码工作正常 我可以将它用于任何其他 shell 命令 但是当我尝试执行 python vers
  • 在 makefile 中,当我在 bash 函数内部使用 if 语句时,它会抛出错误

    在 makefile 中 当我在 bash 函数内部使用 if 语句时 它会抛出错误 test foo if a a then echo 1 fi foo hello ERROR bin sh 1 未找到 或与一个 test foo if
  • 如何摆脱每个新终端会话上运行的某些内容?

    我正在使用狮子 我在每个新的终端会话上都会输出一个错误 bash rvm add to path command not found 这是一个几乎全新的用户帐户 RVM 安装在计算机上的另一个帐户上 bashrc 和 bash profil
  • 如何获取与文件类型关联的图标路径和索引?

    给定一个文件类型 例如 txt 我怎样才能得到 path index 文件类型的关联图标路径和索引 例如 我想转换 txt into Path SystemRoot system32 imageres dll Index 102 有了这些信
  • 如何从脚本向 sudo 提供密码?

    请注意 这是在我的本地计算机上运行的来宾虚拟机 VBox 我不担心安全性 我正在编写一个将在 Linux Ubuntu VM 上执行的脚本myuser用户 该脚本将在下面创建一个非常大的目录树 etc myapp 目前我必须手动完成所有这些
  • -bash: gulp: 在 Mac 中找不到命令

    我尝试在 mac 中安装 gulp 如下所示 Is iMac itop npm root Users itop node modules Is iMac itop npm config set prefix usr local Is iMa
  • Bash 中 $() 和 () 之间的区别

    当我打字时ls l echo file 支架的输出 这只是简单的回显 被获取并传递到外部ls l命令 就等于简单的ls l file 当我打字时ls l echo file 我们有错误 因为不能嵌套 内部外部命令 有人可以帮助我理解之间的区
  • Bash - 如何将参数传递给通过标准输入读取的脚本

    我正在尝试从标准输入执行脚本并将参数传递给它 有办法做到吗 假设我有以下内容 cat script sh bash 我如何将参数传递给脚本 我不想这样做 bash script sh arguments 也不是这个 script sh ar
  • 将所有脚本参数复制到另一个变量

    我需要复制所有脚本参数并将它们传递给另一个脚本 我尝试这样做 args printargs sh args echo printargs sh args 但在这种情况下 如果我使用包含空格的参数调用我的父脚本 例如 script sh ar
  • 如何拆分一行并重新排列其元素?

    我在一行中有一些数据 如下所示 abc edf xyz rfg yeg udh 我想呈现如下数据 abc xyz yeg edf rfg udh 以便打印备用字段并用换行符分隔 有没有这样的衬里 下列awk脚本可以做到这一点 gt echo
  • 变量作为 bash 数组索引?

    bin bash set x array counter 0 array value 1 array 0 0 0 for number in array do array array counter array value array co
  • Linux 中 AF_UNIX 数据报消息的最大大小是多少?

    目前我已达到 130688 字节的硬限制 如果我尝试在一条消息中发送更大的内容 我会收到一条消息ENOBUFS error 我已经检查过net core rmem default net core wmem default net core
  • 在 Ubuntu 上纯粹通过 bash 脚本安装 mysql 5.7

    我想要一个无需任何手动输入即可安装 MySQL 5 7 实例的 bash 脚本 我正在关注数字海洋教程 https www digitalocean com community tutorials how to install mysql
  • 将 stdout 作为命令行 util 的文件名传递?

    我正在使用一个命令行实用程序 该实用程序需要传递文件名以将输出写入 例如 foo o output txt 它唯一写入的东西stdout是一条消息 表明它运行成功 我希望能够通过管道传输写入的所有内容output txt到另一个命令行实用程
  • 如何用 C 语言练习 Unix 编程?

    经过五年的专业 Java 以及较小程度上的 Python 编程并慢慢感觉到我的计算机科学教育逐渐消失 我决定要拓宽我的视野 对世界的一般用处 并做一些 对我来说 感觉更重要的事情就像我真的对机器有影响一样 我选择学习 C 和 Unix 编程

随机推荐

  • 模块化、基于组件的 Sinatra 应用程序的架构

    我正在开发一个 Sinatra 应用程序 其中包含大约 10 个不同的功能组件 我们希望能够将这些组件混合并匹配到应用程序的单独实例中 完全通过 config yaml 文件进行配置 如下所示 components route chunky
  • 同一表中的 MySQL 计数,包括零计数值

    我有这个带有数据的表结构 INSERT INTO test id email id user ref name VALUES 1 email protected cdn cgi l email protection NULL Mike 2
  • Ember.js 渲染大型列表而不锁定浏览器

    当需要在客户端渲染大量项目时 我对 Ember js 有哪些选择 分页是一种减少渲染时间的明显方法 但是还有其他技巧可以让您渲染一个大的项目列表 而不会在 JavaScript 执行时出现明显的浏览器冻结吗 ember 列表视图 https
  • CakePHP 和子查询

    如何使用 cake 语法编写 SQL 子查询 我知道如何编写简单的查询 但无法处理子查询 这是原始查询 SELECT Assumption id Referee id Referee first name Referee second na
  • TFIDF 矢量器给出错误

    我正在尝试使用 TFIDF 和 SVM 对某些文件进行文本分类 一次要选择 3 个单词的特征 我的数据文件已经采用以下格式 天使之眼 每一个都有其自己的 没有停用词 也不能进行旅鼠或词干提取 我希望该功能被选择为 天使眼有 我编写的代码如下
  • 将各种类型的函数应用于值

    假设我有一个方法将多个函数应用于一个值 用法示例 String value a string with numb3r5 Function
  • CSS:Helvetica 是 Mac 上默认的“无衬线”字体,Arial 是 Windows 上默认的无衬线字体吗?

    我有很多 CSS 可以执行以下操作 font family Helvetica Arial sans serif 据我了解 Helvetica 是 Mac 上的默认无衬线字体 Arial 是 Windows 上的默认无衬线字体 如果是这样的
  • Spring Boot Actuator Endpoints 安全性不适用于自定义 Spring Security 配置

    这是我的 Spring Boot 1 5 1 执行器application properties Spring Boot Actuator management contextPath actuator management securit
  • web2py - 如何注入 html

    我使用 rows xml 生成 html 输出 我想知道如何向生成的 html 页面添加 html 代码 例如 添加徽标 链接 css 文件等 rows db db member membership id request args 0 s
  • 使用 Google Static Maps API URL 渲染多边形

    我创建了一个脚本 通过将属性附加到静态地图 URL 来存储动态地图输入 以便我们可以在用户提交后引用它 由于我尚无法确定的原因 Polygon 根本不使用基本静态地图 URL 进行渲染 但它可以与第 3 方站点的静态地图功能配合使用 根据静
  • Google Sheets 查询删除标题不适用于偏移量

    无法弄清楚为什么其中一些查询有效而另一些则无效 只是想建立一个我自己的桌子 query TRANSPOSE ImportHtml C7 table 1 select limit 1 offset 1 query TRANSPOSE Impo
  • 使用逗号表示小数,使用句点表示千位 rdlc 报告

    我正在使用报告查看器控件 rdlc 来生成报告 我的其中一列表示来自 SQL 数据库的十进制值 例如 5199 9800 在此栏的末尾 对所有金额进行求和 因此 金额行的表示方式如下 Fields DEBIT Value 总行的表示方式如下
  • 在 Google 地图上显示 OpenStreetMap 边界(使用 v3 api)

    我想使用使用以下工具获得的 GeoJSON 数据在 Google 地图上显示城市边界 我访问 nominatim openstreetmap org 并搜索一个城市 例如丹佛 使用检索到的 OSM ID 在本例中为 253750 然后我使用
  • Angularjs - 如何对表单验证进行单元测试

    我在用着Jasmine http jasmine github io 对我的 Angular 应用程序进行单元测试 如何在我的控制器中测试表单验证 例如我有一个登录功能 scope login function if scope form
  • JavaFX 2.0 TabPane:选项卡位于左侧并保持选项卡标题水平

    我正在尝试为 Web 应用程序开发 GUI 并且想设置一个 TabPane 其中选项卡放置在左侧 保持选项卡标题水平 我已经找到了如何将选项卡放在左侧 但经过多次搜索后 我没有成功将标题设置为右对齐 它们仍然是垂直的并且难以阅读 我该如何解
  • Android Studio 项目视图中的重复文件

    我有一个奇怪的问题 项目特定的根级别文件 gitignore gradlew gradle properties 等 在 Android Studio 的项目视图中显示两次 有人知道如何解决这个问题吗 我尝试重新导入项目 删除 iml 和
  • 实体框架事务

    我有一个程序在两台服务器上重复运行 我需要在程序中选择和更新数据库记录 因此我需要来自EF的表锁或事务 否则程序的每个副本都可以选择和修改相同的记录 虽然第一个副本使数据库发生更改 但另一个副本不应运行相同的代码部分 我在 EF 中找到了
  • 有多少 Java 6 API 是由 Android 实现的?

    我想将一个小型开源AES加密类移植到Android上 如果Android的API尽可能接近Java 6 API 那么我的工作量会减少很多 实现了多少 或可参考 因为我尝试在谷歌上搜索这个内容 但我还没有想出任何有用的东西 恕我直言 一般来说
  • 代理下使用 HTTPClient 4.5 的 Resttemplate 连接超时

    如何设置超时时间 我已经设置了几乎所有的超时配置 通常没有代理就可以正常工作 当我使用代理连接详细信息进行连接时 会出现问题 日志显示正在连接 但未收到回复 2020 03 04 19 53 39 751 DEBUG main org sp
  • Bash:如何从参数设置变量并使用默认值

    很明显 使用 shell 脚本可以通过多种方式完成这类事情 比大多数编程语言都多 因为有各种不同的变量扩展方法和程序 例如test and and etc 现在我只是在寻找 DIR 1 or 这意味着 我的 DIR 变量应该包含第一个参数中