macos - 根据一组条件更改变量

标签 macos bash

这个问题与此处的线程相关:

Today's date, minus X days in shell script

但是因为我现在正在操作变量,所以我启动了另一个线程。

如上所述,我需要获取今天的日期减去 200 天,并将年、月和日放在单独的变量中(在这个问题中我将使用 200,而在另一个问题中则使用 222)。但是,我需要将一月表示为 0,二月表示为 1(或 01),三月表示为 2(或 02)等...我尝试过:

MONTHS200=$(date -j -v-200d -v-1m +"%m")
if ${MONTHS200}=01; then 
${MONTH200}=0
else ${MONTHS200}=${MONTH200}
fi

但我收到错误 ./update_newdateformat.sh: line 20: 12=01: command not find ./update_newdateformat.sh: line 23: 12=: command not find -v-1m 适用于除一月之外的所有月份,因为它变为 12,而不是 0

最佳答案

以下是如何在脚本中将所有月份数字下移 1:

MONTHS200=$(date -j -v-320d +"%m")

# Remove leading zero if there is one, so it doesn't cause problems later
MONTHS200=${MONTHS200#0}

MONTHS200=$((MONTHS200-1))

这里是如何使用if= shell 中的(赋值)语法:

if [[ "${MONTHS200}" == "01" ]]; then
    MONTHS200="0"
else
    MONTHS200=${AnotherVariable}
fi

请注意,对于数值比较,您需要使用:

  • -eq而不是==
  • -ne而不是!=
  • -lt而不是<
  • -le而不是<=
  • -gt而不是>
  • -ge而不是>=

例如:

 if [[ "${MONTHS200}" -eq 1 ]]; then 

关于macos - 根据一组条件更改变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13535871/

相关文章:

macos - LTLIBRARIES : mv *. Tpo *.Plo,但前者不存在,后者已经存在

bash - 解析顺序和扩展顺序之间的区别

linux - 通过管道传输到 awk 的 Bash 命令有时会被缓冲

c++ - Windows WMI 对 MacOS C++ 开发的等价物是什么?

macos - Delphi XE2 在 Mac 上可以播放 WAV 声音吗?

php - APC 未在 Mac OS X 上为 google-app-engine 启用

bash - 检查文件是否可执行

bash - Echo -n With String 参数打印 "-n"部分,即使不在引号内

linux - 在 Bash(和其他 shell 语言)中,如何在通过的参数中保留空格转义字符

macos - Mac (Catalina) 上的 Azure 存储资源管理器安装不起作用