小编dev*_*os1的帖子

以空合并方式设置 shell 变量

我真的很喜欢“空合并”,您可以在其中将变量设置为事物列表中的第一个“非空”值。许多语言都支持这一点,例如:

C#:

String myStr = string1 ?? string2 ?? "default";
Run Code Online (Sandbox Code Playgroud)

JavaScript:

var myStr = string1 || string2 || "default";
Run Code Online (Sandbox Code Playgroud)

...等等。我只是好奇这是否可以在 Bash 中完成以设置变量?

伪:

MY_STR=$ENV{VAR_NAME}??$ANOTHER_VAR??"default";
Run Code Online (Sandbox Code Playgroud)

shell bash variable

33
推荐指数
2
解决办法
1万
查看次数

为什么 $# 在我的函数中总是 0?

Bash 快把我逼疯了。我无法弄清楚为什么以下内容(也不是我从示例中逐字复制和粘贴的数十种变体中的任何一种)都无法正常工作:

#!/bin/bash

echo $#

function main {
    if (( $# < 1 )); then
        usage
    fi

    echo "good"
}

function usage {
    echo "Usage: $0 <outputdir>"
    exit 1
}

main
Run Code Online (Sandbox Code Playgroud)

由于某种原因,参数检查每次都失败,即使我传递了一个参数并且可以清楚地看到$#按预期设置。

shell bash parameter

6
推荐指数
2
解决办法
4797
查看次数

如何将文件内容作为命令行参数传递

我将文件路径存储在文件中,需要将该文件的内容作为参数传递给 shell 脚本,特别是 Maven,如下所示:

mvn -Dvar_name=(contents of file)
Run Code Online (Sandbox Code Playgroud)

这是否有效:

mvn -Dvar_name=(cat /path/to/file)
Run Code Online (Sandbox Code Playgroud)

?

bash cat arguments

5
推荐指数
2
解决办法
1万
查看次数

尝试 cp 带有空格的路径,在编写脚本但回显和粘贴成功时失败?

我有一个脚本试图从包含反斜杠转义空格并存储在字符串变量中的路径复制目录到工作目录的子目录。

当我运行脚本时,我得到了以下用法cp

usage: cp [-R [-H | -L | -P]] [-fi | -n] [-apvX] source_file target_file
       cp [-R [-H | -L | -P]] [-fi | -n] [-apvX] source_file ... target_directory
Run Code Online (Sandbox Code Playgroud)

但是,如果我回显该命令,它看起来完全正确。即使我随后将该回显行复制并粘贴回终端,它也能正常执行!

rm -rf Payload
mkdir Payload
echo cp -Rf $APP_PROTOTYPE/ Payload/${BUNDLE_NAME}.app
cp -Rf $APP_PROTOTYPE/ Payload/${BUNDLE_NAME}.app
Run Code Online (Sandbox Code Playgroud)

我不明白为什么它不能在 Bash 中正确执行,但手动将命令粘贴回工作中可以完美无缺。此外,我什至无法说出问题是什么,因为当我手动执行时它可以正常工作(但是我显然怀疑空格)。退出代码cp是 64,如果这有帮助的话。

$APP_PROTOTYPE看起来像.golden_repo/Production\ Releases\ Only/Kiosk/1.0.3/Prototype/Kiosk.app,并注意这.golden_repo是一个已安装的 smbfs 共享。

osx bash cp

1
推荐指数
1
解决办法
1万
查看次数

标签 统计

bash ×4

shell ×2

arguments ×1

cat ×1

cp ×1

osx ×1

parameter ×1

variable ×1