- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
这个如此简单的脚本失败了:
#!/bin/bash
n=1
printf -v fn "%05d" $n
echo $fn
与
3: printf: Illegal option -v
为什么!!! (Ubuntu 14.04)
最佳答案
根据@Joe,这似乎是 Whats the difference between running a shell script as ./script.sh and sh script.sh 的副本.
根据@Telemachus,Debian 及其衍生产品使用 dash 作为它们的默认 shell。参见 http://wiki.ubuntu.com/DashAsBinSh获取更多信息。
这是我在 Ubuntu 系统上看到的:
$ ls -lF `which sh`
lrwxrwxrwx 1 root root 4 Aug 15 2012 /bin/sh -> dash*
$ ls -lF `which bash`
-rwxr-xr-x 1 root root 959168 Mar 30 2013 /bin/bash*
这就是为什么我无法在 Mac OS X 10.8.5 上重现该问题的原因。我确实通过使用 sh
而不是 bash
调用脚本在 Ubuntu 上重现了它。
我将保留其余的答案,因为它展示了您可能采取的一些步骤来解决问题。
你能检查一下你的 bash 版本吗?
$ bash --version
bash --version
GNU bash, version 3.2.48(1)-release (x86_64-apple-darwin12)
这真的有用吗?
#!/bin/bash
n=1
printf -v fn "%05d" $n
echo $fn
检查名称printf
的类型?
$ type printf
printf is a shell builtin
$ function printf { echo "giggle" ; }
giggle
$ type printf
printf is a function
printf ()
{
echo "giggle"
}
giggle
$
查看 printf
内置帮助?
$ help printf
help printf
printf: printf [-v var] format [arguments]
printf formats and prints ARGUMENTS under control of the FORMAT. FORMAT
is a character string which contains three types of objects: plain
characters, which are simply copied to standard output, character escape
sequences which are converted and copied to the standard output, and
format specifications, each of which causes printing of the next successive
argument. In addition to the standard printf(1) formats, %b means to
expand backslash escape sequences in the corresponding argument, and %q
means to quote the argument in a way that can be reused as shell input.
If the -v option is supplied, the output is placed into the value of the
shell variable VAR rather than being sent to the standard output.
内置的 printf
是否被其他地方的定义所取代?这是我用来检查 shell 中名称定义的函数:
list ()
{
if [[ 0 == $# ]]; then
Log "";
Log "FUNCTIONS:";
Log "----------";
declare -F;
Log "";
Log "EXPORTS:";
Log "--------";
export -p;
Log "";
Log "PRINTENV:";
Log "--------";
printenv;
else
while [[ ! -z "$1" ]]; do
local name="$1";
shift;
if ! alias "${name}" 2> /dev/null; then
if ! declare -f "${name}"; then
if ! help "${name}" 2> /dev/null; then
if ! which "${name}"; then
Log "Not found: '${name}'";
fi;
fi;
fi;
fi;
done;
fi
}
这是我在新的 shell 中运行它时的输出:
$ list printf
printf: printf [-v var] format [arguments]
printf formats and prints ARGUMENTS under control of the FORMAT. FORMAT
[… snip …]
但是如果我重新定义printf
,它会显示定义:
$ function printf { echo "kibble" ; }
kibble
$ printf
kibble
kibble
$ list printf
printf ()
{
echo "kibble"
}
kibble
$
我很想知道这里到底发生了什么!!!
我喜欢其他答案的建议,尝试使用 bash 显式调用脚本:
$ bash myscript.sh
这是我在 Ubuntu 服务器上看到的:
$ uname -a
Linux rack 3.11.0-17-generic #31-Ubuntu SMP Mon Feb 3 21:52:43 UTC 2014 x86_64 x86_64 x86_64 GNU/Linux
$ cat > dme.sh
#!/bin/bash
n=1
printf -v fn "%05d" $n
echo $fn
$ chmod +x ./dme.sh
$ ./dme.sh
00001
$ bash dme.sh
00001
$ sh dme.sh
dme.sh: 3: printf: Illegal option -v
关于bash - 如何在 bash 中格式化数字,可能使用 printf?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24121160/
我想知道以下语句在 C 中会打印什么? printf("hello\n") || (printf("goodbye\n") || printf("world\n")); 我通常习惯于使用“cout”在
这是我目前正在学习的系统编程类(class)的幻灯片: catch_child 是 SIGCHLD 处理程序。输出与代码如何对应?为什么没有打印一些“Child #x started”消息? 最佳答案
这有点像拼图……我刚刚又回到了C,打算这次掌握它。所以我一直在阅读 The C Programming Language ,我得到了这个声明: Among others, printf also re
如何使用 printf 在字符串末尾附加空格? 我找不到任何在右侧附加空格的示例。 A similar question我发现使用 printf改为在字符串的左侧添加空格。 最佳答案 使用负数左对齐(
我想通过 usart 从 stm32f405 注销。 在我的 syscall.c 文件中,我实现了通过 usart 打印的功能: int _write(int file, char *ptr, int
我想定义一个记录器函数,比如 myPutStrLn = putStrLn . (++) "log: " main = do myPutStrLn "hello" 这很好。现在我想用 printf 格式
Printf module API详细介绍了类型转换标志,其中: %B: convert a boolean argument to the string true or false %b: conv
@H2CO3 这是我的主要代码: #pragma OPENCL EXTENSION cl_ amd_ printf : enable #define PROGRAM_FILE "matvec.cl"
Printf module API详细介绍了类型转换标志,其中: %B: convert a boolean argument to the string true or false %b: conv
您可以使用 printf 字段宽度说明符截断字符串: printf("%.5s", "abcdefgh"); > abcde 不幸的是,它不适用于数字(将 d 替换为 x 是相同的): printf(
关闭。此题需要details or clarity 。目前不接受答案。 想要改进这个问题吗?通过 editing this post 添加详细信息并澄清问题. 已关闭 4 年前。 Improve th
我遇到了我见过的最奇怪的错误之一。 我有一个简单的程序,可以打印多个整数数组。 对数组进行排序,然后打印...... place_in_buf(n100, 100); insertion(10
我的程序是每隔一段时间获取文件大小并显示它以记录任何更改。由于某种原因,执行下面的代码挂起,只为我提供了一个光标。没有打印或显示任何内容。 代码: #include #include #inclu
printf("It is currently %s's turn.\n", current->name); 我想知道为什么在 %s 之后打印出额外的换行符。我知道C 中的字符串总是以\0 结尾。没有
这个问题已经有答案了: printf anomaly after "fork()" (3 个回答) fork() in c using printf [duplicate] (2 个回答) 已关闭 9
我对编程很陌生。 我正在尝试编写一个程序,从数组中调用水果的价格。但我希望代码在写价格之前也写水果的名称。如果我键入 2,如何使输出为“Orange price : 10”而不仅仅是 price :
这个问题在这里已经有了答案: How do I print a non-null-terminated string using printf? (2 个答案) 关闭 7 年前。 例如,我有一个字符
我有一个 atmel UC3-L0 和罗盘传感器。现在我安装 AtmelStudio 并将一些演示代码下载到电路板中。但是我不知道演示代码中的函数 printf 会在哪里出现数据。我应该如何获取数据?
我有一个 atmel UC3-L0 和罗盘传感器。现在我安装 AtmelStudio 并将一些演示代码下载到电路板中。但是我不知道演示代码中的函数 printf 会在哪里出现数据。我应该如何获取数据?
嗨,我是 C 世界的新手,我的代码确实有些奇怪。目标是创建一个函数,可以在开头和结尾处用空格和/或制表符修剪字符串。我无法使用字符串库。 问题是我的代码中有一个 printf 只是用于测试,它的工作非
我是一名优秀的程序员,十分优秀!