Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在bash中的$()中添加标志_Bash_Shell - Fatal编程技术网

如何在bash中的$()中添加标志

如何在bash中的$()中添加标志,bash,shell,Bash,Shell,我有下面的bash脚本,-n标志在echo中似乎总是被解释为字符串 echo Hello, who am I talking to? read login_name login_name=$(echo -n $login_name | base64) echo $login_name | base64 --decode 我该如何纠正这一点,或者我的脚本还有其他更好的语法吗 最好使用更便携的printf,而不是echo-n,并使用带有正确引用的read-p read -p 'Hello, who

我有下面的bash脚本,-n标志在echo中似乎总是被解释为字符串

echo Hello, who am I talking to?
read login_name
login_name=$(echo -n $login_name | base64)
echo $login_name | base64 --decode
我该如何纠正这一点,或者我的脚本还有其他更好的语法吗

最好使用更便携的printf,而不是echo-n,并使用带有正确引用的read-p

read -p 'Hello, who am I talking to? ' login_name
login_name=$(printf '%s' "$login_name" | base64)
printf '%s' "$login_name" | base64 --decode
echo
PS:只是想澄清一下,在$内使用任何标志都没有什么特别之处。。。所以我们可以这样使用它:

dt=$(date -u '+%Y/%m/%d')
echo "$dt"

我需要在不返回echo行的情况下进行编码,这就是为什么我添加了-n,您的代码是否删除了换行符$没有什么特别之处。。。在这里可以使用:dt=$date-u'+%Y/%m/%d'如果您可以添加一个答案来演示如何在$中添加标志,我将标记+1@FanCheung它与美元无关,而与echo有关。echo的某些版本,如果其第一个参数以-,开头,则将其解释为标志。有些没有。基本上,尝试将标志选项传递给echo或将其与以-开头的字符串一起使用是不安全的。printf的使用更为复杂,但更具可预测性和可控性。谢谢@GordonDavisson,这确实有助于澄清这个想法