Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/joomla/2.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_Awk_Sed - Fatal编程技术网

在bash中创建动态表

在bash中创建动态表,bash,awk,sed,Bash,Awk,Sed,我有一个bash脚本,它创建不同的用户和密码。密码和用户存储在变量中 cat << EOT +---------------------------------------+ | Linux Logins | +---------------+-----------------------+ | User | Password | +---------------+---------

我有一个bash脚本,它创建不同的用户和密码。密码和用户存储在变量中

    cat << EOT
+---------------------------------------+
| Linux Logins                          |
+---------------+-----------------------+
| User          | Password              |
+---------------+-----------------------+
| $test      | $testpw               |
+---------------+-----------------------+

EOT
这是因为选项卡是硬编码的。我如何以不同的方式解决这个问题?我知道有awk和专栏可以这样做。
如果可能的话,我希望它在mysql控制台中是动态的。

变量可以用printf填充

printf -v test   %20s "$test"
printf -v testpw %20s "$testpw"
或左对齐

printf -v test   %-20s "$test"
printf -v testpw %-20s "$testpw"
或在特定长度(19)后进行trunc


变量可以用printf填充

printf -v test   %20s "$test"
printf -v testpw %20s "$testpw"
或左对齐

printf -v test   %-20s "$test"
printf -v testpw %-20s "$testpw"
或在特定长度(19)后进行trunc


我想你的意思是说你的问题是因为你的标签没有硬编码。但是标签并没有足够的灵活性来做你想做的事情。你可以做:

cat << EOT            
+---------------------------------------+              
| Linux Logins                          |              
+---------------+-----------------------+              
| User          | Password              |              
+---------------+-----------------------+              
| $(printf %-14s "$test")| $(printf %-22s "$testpw")|          
+---------------+-----------------------+              

EOT

cat我想你的意思是,你的问题是因为你的标签没有硬编码。但是标签并没有足够的灵活性来做你想做的事情。你可以做:

cat << EOT            
+---------------------------------------+              
| Linux Logins                          |              
+---------------+-----------------------+              
| User          | Password              |              
+---------------+-----------------------+              
| $(printf %-14s "$test")| $(printf %-22s "$testpw")|          
+---------------+-----------------------+              

EOT

cat我认为这在这里是不可能的。可能的方法是使用
printf
,如中所述,我认为这在here文档中是不可能的。可能方法是使用@patrick_uu中描述的
printf
。对不起,我从函数中剪切了n-pasted,并使用
$1
$2
而不是
$test
$testpw
。我应该在函数定义中留下原始答案!谢谢,这似乎与密码高达22个字符的工作。超过22个字符是不现实的,因此此解决方案非常有效。非常感谢。也可以使用
printf-v
来完成,这更有效,因为避免了调用子shell来处理管道结果expansion@patrick_抱歉,我从函数中剪切了n粘贴,并使用了
$1
$2
而不是
$test
$testpw
。我应该在函数定义中留下原始答案!谢谢,这似乎与密码高达22个字符的工作。超过22个字符是不现实的,因此此解决方案非常有效。非常感谢。也可以使用
printf-v
完成,这更有效,因为避免了调用子shell到管道导致扩展