在 PHP 中,可以通过以下方式将一个变量的变量值复制到另一个变量:
$copy = clone $original;
Run Code Online (Sandbox Code Playgroud)
这不是询问有关 PHP 的问题的地方,但我误解了为什么clone在那里添加这个词有帮助,即为什么不只写$copy = $original,也许与 Bash 的比较(如果适用)可以帮助我理解原因。
在“Greg's Wiki”上的Bash Pitfalls中,我发现了以下引用:
事实上,
echo这里使用该命令并不能绝对安全。-n例如,如果变量包含,echo将认为是一个选项,而不是要打印的数据。打印变量值的唯一绝对可靠的方法是使用printf:Run Code Online (Sandbox Code Playgroud)printf "%s\n" "$foo"
但是当我输入:
var="-n Hello"
echo "$var"
Run Code Online (Sandbox Code Playgroud)
它工作正常并且不会解释-n为一个选项,所以我不明白为什么我引用的消息来源说我们需要使用它printf才能绝对安全?
为什么看似zsh明白要做什么some_variable=1 command,却又不明白some-variable=1 command?例如:$ fs_screen=1 mpv --fs-screen=${fs_screen} someFile.mp4工作正常,但$ fs-screen=1 mpv --fs-screen=${fs-screen} someFile.mp4结果是zsh: command not found: fs-screen=1
我深入研究了 zsh 文档,发现了我认为的问题所在。摘自https://zsh.sourceforge.io/Doc/Release/Shell-Grammar.html#Precommand-Modifiers:
\nA simple command may be preceded by a precommand modifier, which will alter how the command is interpreted. These modifiers are shell builtin commands with the exception of nocorrect which is a reserved word.\n\n-\nThe command is executed with a \xe2\x80\x98-\xe2\x80\x99 prepended to its argv[0] string.\nRun Code Online (Sandbox Code Playgroud)\n但是,我在任何地方都找不到有关此内容的更多信息。它的目的是什么,是否可以禁用它,以便我可以使用 …
我正在尝试运行以下两个命令...
LD_LIBRARY_PATH =/opt/oracle/instantclient_12_1
导出 LD_LIBRARY_PATH
但是当我运行第一个命令时出现错误
-bash: LD_LIBRARY_PATH: command not found
Run Code Online (Sandbox Code Playgroud)
我的操作系统数据如下,
- 操作系统版本 = CentOS 5.9 版(最终版)
- 平台数据 = 2.6.18-348.18.1.el5 x86_64 x86_64 GNU/Linux
我已经以普通用户和 sudo 的身份尝试过,尝试仅设置 LIBRARY_PATH 时也会遇到相同的错误。这适用于 ubuntu 我做错了什么?
我知道!!重新运行命令,但是如果我重新运行一个在命令中有变量的命令,究竟会发生什么?
我所有的 Hadoop 配置文件都位于以下位置:
./.linuxbrew/Cellar/hadoop/2.7.3/libexec/etc/hadoop/"
Run Code Online (Sandbox Code Playgroud)
要设置我的 HADOOP_HOME 变量,我是使用点符号还是 ~?
HADOOP_HOME = "./.linuxbrew/Cellar/hadoop/2.7.3/libexec/etc/hadoop/"
Run Code Online (Sandbox Code Playgroud)
或者
HADOOP_HOME = " ~/.linuxbrew/Cellar/hadoop/2.7.3/libexec/etc/hadoop/"
Run Code Online (Sandbox Code Playgroud) 大家好
目的:检查文件中是否存在字符串并相应地运行操作
if [ -z 'sudo cat /etc/sudoers | grep "$USER ALL=(ALL) NOPASSWD:ALL"' ]; echo "no output, cont." || echo "line exists, skipping"
Run Code Online (Sandbox Code Playgroud)
在行存在和不存在的情况下,输出始终显示“行存在,跳过”。
将输出添加到变量中,例如 x,用变量替换 if 语句中的行会产生正确的输出,
如何“跳过”可变路由并直接运行命令?
这个表达:
FN=27
LN=145
cat $FILENAME | sed -n $FN,$LNp
Run Code Online (Sandbox Code Playgroud)
因以下错误而失败:“sed:-e 表达式 #1,字符 3:意外的‘,’”但是当我使用实际数字时,我得到了预期的结果。没有嵌入特殊字符,也没有尾随或前导空格
cat $FILENAME | sed -n 27,145p
Run Code Online (Sandbox Code Playgroud)
这里发生了什么?
对创建 RPM 还很陌生,但我已经掌握了基础知识。我正在编写基础脚本,并且有一个要求,即我不能接受将存储新创建的 RPM 的默认位置。
通常,创建的 RPM 存储在 ~/rpmbuild/RPMS 中
我需要将它们保存到 /centralStorage/Some/New/Location。
RPM 构建器正在寻找什么变量来知道将新创建的 RPM 保存在哪里?我似乎无法在文档中找到如何手动更改它。
我有一个文本文件(或管道输出,在这里无关紧要)
memcached.uptime 1061374
memcached.curr_connections 480
memcached.cmd_get 478962548
memcached.cmd_set 17641364
memcached.cmd_flush 0
Run Code Online (Sandbox Code Playgroud)
如果我使用命令,cat test.txt | while read i; do echo $i; done它会产生非常预期的输出:
memcached.uptime 1061374
memcached.curr_connections 480
memcached.cmd_get 478962548
etc
Run Code Online (Sandbox Code Playgroud)
但是如果我循环使用,for i in $(cat test.txt); do echo $i; done我会看到不同的东西:
memcached.uptime
1061374
memcached.curr_connections
480
memcached.cmd_get
478962548
etc
Run Code Online (Sandbox Code Playgroud)
问题是:为什么???