在sh(ell)脚本中没有OSTYPE

kei*_*iki 8 linux shell environment-variables sh ubuntu-14.04

目前我正在使用新的Xubuntu trusty tahr建立一个新系统.我不太熟悉shell脚本,但我有一个需要OSTYPE环境变量才能确定要做什么.

如果我echo $OSTYPE在xfce-terminal中呼叫,我就会成功linux-gnu.

如果我调用以下脚本,我只会得到一个空行.

#!/bin/sh
echo $OSTYPE
Run Code Online (Sandbox Code Playgroud)

我错过了什么,或者它可能是新的ubuntu的问题?

在我的另一台机器上,它适用于该脚本.但我不知道是否有什么改变,因为系统本来不是我的.

roj*_*oke 8

OSTYPE环境变量不是由原始的Bourne shell,而这一点正是被你的脚本的第一行调用的认可.

替换为:

#!/bin/bash
Run Code Online (Sandbox Code Playgroud)

要么

#!/bin/ksh
Run Code Online (Sandbox Code Playgroud)

适合您的设置.

  • 为了可移植性:`#!/usr/bin/env bash` (2认同)
  • ^ 只是一个说明..bash 不是(为了便携性)。因为较新的 ubuntu 使用破折号作为外壳。如果您需要更好的可移植性,请确保其 bourne shell POSIX 兼容。在 bash 中,您可以使用“set -o posix”或使用 --posix 运行脚本来强制执行合规性。REF - https://www.gnu.org/software/bash/manual/html_node/Bash-POSIX-Mode.html#Bash-POSIX-Mode (2认同)